国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

用C語言實現(xiàn)21點游戲

2020-07-27 14:10紀輝進
現(xiàn)代信息科技 2020年6期
關(guān)鍵詞:數(shù)組莊家點數(shù)

摘? 要:C語言是實踐性很強的一門課程,要學(xué)好C語言,就得多編寫代碼多練習(xí);C語言課程不僅在計算機類專業(yè)的開設(shè),很多高校連非計算機專業(yè)也在學(xué)習(xí)設(shè);“填鴨式”“驗證式”教學(xué)已經(jīng)讓學(xué)生苦不堪言,對學(xué)習(xí)提不起興趣,將21點撲克牌游戲案例引入C語言的教學(xué),借此激發(fā)學(xué)生的學(xué)習(xí)熱情,積累項目經(jīng)驗,達到提升學(xué)生實踐動手能力的目的。

關(guān)鍵詞:C語言;情境教學(xué);任務(wù)驅(qū)動;項目案例;21點撲克牌游戲

中圖分類號:TP311.1 ? ? ?文獻標識碼:A 文章編號:2096-4706(2020)06-0099-03

Abstract:C language is a very practical course. To learn C language well,you have to write more code and practice more;C language courses are not only offered in computer majors,but also in non computer majors in many colleges and universities;“cramming method” and “verification” teaching have made students miserable and have no interest in learning. This paper introduces the case of BlackJack card game into the teaching of C language,hoping to stimulate studentsenthusiasm for learning,accumulate project experience and improve studentspractical ability.

Keywords:C language;situational teaching;task driven;project cases;blackjack game

0? 引? 言

C語言是一門面向過程的程序設(shè)計語言,學(xué)完本門課程后要能熟練地編寫順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序;按教材案例進行“驗證式”的學(xué)習(xí),不會舉一反三、發(fā)散思維,對知識不會綜合運用,就如同“死讀書”。

越來越多的行業(yè)、崗位運用計算機和軟件來處理問題,是因為軟件的靈活,能按照特定的語法,在規(guī)則范圍內(nèi)靈動地組合,能解決日常生活中無窮無盡的需求;書本上的知識,我們要活學(xué)活用;將生活化的案例引入“C語言程序設(shè)計”課程,對提升學(xué)生的邏輯思維素質(zhì)、實踐動手能力都大有好處,特別是游戲情境案例,能提高學(xué)生學(xué)習(xí)興趣,激發(fā)主動學(xué)習(xí)的動力,幫助學(xué)生探索新知,構(gòu)建知識體系;本文將探討21點撲克牌游戲的實現(xiàn)算法。

1? 項目背景

1.1? 開發(fā)環(huán)境

開發(fā)語言:C語言。

開發(fā)工具:Visual Studio 2012/Visual C++ 6.0。

1.2? 項目需求

21點撲克牌游戲規(guī)則如下:一副撲克牌有“黑桃A”到“黑桃K”“紅桃A”到“紅桃K”“梅花A”到“梅花K”“方塊A”到“方塊K”,共52張,“A”算1點,“2”算2點,以此類推,“10”算10點,“J”“Q”“K”都按10點計算點數(shù);另外“A”既可計算為1點,也可計算為11點,當成11點的前提條件是總點數(shù)不超出21點的范圍,否則只能當成1點,這意味著對莊家和玩家怎么有利怎么算;游戲開始先給莊家發(fā)兩張牌,其中一張作為底牌不展示牌面,另一張顯示牌面;后給玩家發(fā)兩張牌,牌面都展示出來;然后重復(fù)詢問玩家是否要牌,如果玩家要牌,再次展示莊家和玩家的所有牌面(莊家底牌不顯示),直到玩家不要牌或玩家牌面超過21點為止;每給玩家發(fā)一張牌就重新展示莊家和玩家牌面,并詢問玩家是否要牌;玩家不要牌后莊家根據(jù)牌面點數(shù)決定是否要牌,直到莊家牌面贏或超出21點的范圍為止;誰的牌面越趨近21點且不超過21點誰贏,同為21時莊家贏,決出勝負后游戲進入下一輪。游戲程序執(zhí)行效果如圖1所示。

2? 項目設(shè)計

2.1? 數(shù)據(jù)模型

C語言中常用的數(shù)據(jù)類型有int、float、double、char;屏幕上要輸出如“黑桃A”的字符串,需要用到一維字符數(shù)組;一副撲克牌有52張,需要用到二維字符數(shù)組;char pk[52][7]={"黑桃A",…,"黑桃K",…,"方塊K"};用一維整型數(shù)組表示點數(shù)intpoint[52]={1,2,…,10,10,10,10,…,1,2,…,10,10,10,10};每張牌每局只能發(fā)一次,用一維整型數(shù)組記錄牌是否發(fā)出過,未發(fā)為0,發(fā)出為1,int already[52]={0}。

記錄莊家和玩家拿到的牌是撲克牌數(shù)組的第幾張,我們只用保存數(shù)組下標,莊家極限概率可得到4個A、4個2、3個3,共11張牌,玩家極限可得到4個A、4個2、3個3,共11張牌,玩家可能計算失誤多要一張共12張牌;int boss[11],player[12];A可當11點計算的前提是莊家或玩家有A牌,要記錄莊家玩家A牌個數(shù):int bossA、int playerA;要記錄牌的張數(shù)和點數(shù):int bossi、playeri、bossPoint、playerPoint;模塊化可降低程序復(fù)雜度,為方便在各函數(shù)中訪問以上數(shù)據(jù),必須將數(shù)據(jù)設(shè)置為全局變量,還要做好隨機種子的初始化,為取隨機數(shù)做好準備。

2.2? 程序流程圖

21點游戲程序設(shè)計流程圖如圖2所示。

3? 核心代碼

3.1? 發(fā)牌實現(xiàn)代碼

int getpk()//發(fā)一張有效牌,牌數(shù)組下標0-51隨機,buf為0牌未發(fā)過為1發(fā)過,發(fā)過得重發(fā)

{int r, buf;do{ r=rand()%52; buf=0;if (already[r]= =1)buf=1;else already[r]=1;}while(buf);

return r;}

3.2? 計算玩家牌面點數(shù)和代碼

void playerSum()//莊家牌面點數(shù)和代碼與此類似,本文略

{ int i; playerPoint=0; playerA=0; for(i =0;i

3.3? 玩家要牌代碼

while(playerPoint<=21){//玩家沒超出21點的范圍就會問你要不要牌//清空緩沖區(qū)

printf("要牌嗎(y/n)?");fflush(stdin); yorn=getchar();if(yorn =='n')break;

player[playeri]=getpk();playeri++;playerSum();

if(playerPoint<=21){printf("莊家牌面:底牌\t");

for(i=1;i

printf("玩家牌面:");for(i=0;i

3.4? 判斷輸贏代碼

if(playerPoint>21)printf("莊家贏\n"); else{if(bossPoint>21)printf("玩家贏\n");

else{if(playerPoint>bossPoint)printf("玩家贏\n"); else printf("莊家贏\n");}}

4? 結(jié)? 論

本案例用到了分支和循環(huán)流程控制語句、整型和字符型等基本數(shù)據(jù)類型、數(shù)組和函數(shù)等C程序設(shè)計中的核心知識點,囊括了教學(xué)大綱中百分之九十的知識點,本案例的實現(xiàn)過程,也是學(xué)生對所學(xué)知識的一次回顧、精練與提升的過程,寓教于樂,激發(fā)學(xué)習(xí)學(xué)習(xí)興趣,提升學(xué)習(xí)動力,建立學(xué)習(xí)的成就感和信心。

本案例邏輯思維嚴謹又不太復(fù)雜,實現(xiàn)的代碼規(guī)模適中;其情境與多數(shù)人喜愛的網(wǎng)絡(luò)游戲情境類似,讓學(xué)生產(chǎn)生一種想親自編碼實現(xiàn)的想法;結(jié)合本文思路,運用所學(xué)的零碎知識點按圖索驥,大部分學(xué)生都有能力將之實現(xiàn);本案例引導(dǎo)學(xué)生溫習(xí)了C程序設(shè)計的基礎(chǔ)知識,對學(xué)生理解C語言的基本語法、提高動手能力、提升邏輯思維能力大有幫助。

參考文獻:

[1] 王亮.《C語言程序設(shè)計》循環(huán)結(jié)構(gòu)教學(xué)案例研究 [J].科技視界,2018(1):60-61.

[2] 譚浩強.C程序設(shè)計(第五版) [M].北京:清華大學(xué)出版社,2017.

[3] 李敏.以培養(yǎng)計算思維為主的C程序設(shè)計課程教學(xué)改革 [J].電腦知識與技術(shù),2019,15(12):111-112.

[4] 本·克萊蒙.C程序設(shè)計新思維(第2版) [M].趙巖,譯.北京:人民郵電出版社,2018.

[5] 高歡.自主學(xué)習(xí)模式下微課在高校教學(xué)中的實踐研究 [D].河北:河北師范大學(xué),2019.

[6] 竇祥國.面向計算思維培養(yǎng)的高職C程序設(shè)計案例教學(xué)研究 [J].中國職業(yè)技術(shù)教育,2019(32):93-96.

作者簡介:紀輝進(1977-),男,漢族,湖北黃陂人,講師,本科,主要研究方向:軟件技術(shù)教學(xué)。

猜你喜歡
數(shù)組莊家點數(shù)
JAVA稀疏矩陣算法
莊家拉高遇襲被狠揍
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
更高效用好 Excel的數(shù)組公式
畫點數(shù)
分析莊家被砸后自救操盤細節(jié)
如何識別莊家自救設(shè)下的陷阱
破解心靈感應(yīng)
解析亞盛集團:莊家拉高股價后被砸遇險
尋找勾股數(shù)組的歷程
板桥市| 河间市| 仁化县| 汉寿县| 盘山县| 阿勒泰市| 永善县| 长岭县| 岳普湖县| 广丰县| 贡嘎县| 博客| 平顶山市| 新晃| 宣武区| 交城县| 双辽市| 陆丰市| 色达县| 芦山县| 松潘县| 偃师市| 泰顺县| 蚌埠市| 沭阳县| 碌曲县| 泗水县| 屯留县| 英德市| 台州市| 永胜县| 昔阳县| 上犹县| 高尔夫| 赣榆县| 博爱县| 桃江县| 平顶山市| 沾益县| 江达县| 昭觉县|