貪吃蛇遊戲是壹款經典遊戲。在壹個封閉的城墻裏,壹個城墻上的隨機食物,四個光標通過按鍵盤上的鍵控制蛇上下移動。如果蛇頭擊倒食物,那麽食物被體長為10點的蛇吃掉,其次是食物。等等。如果蛇吃了蛇,撞到了墻上,他的身體在動或者蛇頭身體在玩遊戲。
2.2總體設計程序描述
第壹局,跑壹些,最後壹部分(部分其實已經開始跑壹部分了)。
設計思想是蛇和蛇的運動的圖形表示的關鍵。用壹個長方形的小蛇身,身體每長加壹個長方形的塊,用兩個走私者表示。必須從蛇身上移動,蛇不能反方向移動,也就是不改變蛇的尾巴。如果不按任何鍵,蛇就會朝這個方向前進。當玩家按下箭頭鍵有效地將蛇向指定方向移動時,他的身體將移動壹步。所以當妳有效地按下箭頭鍵時,首先確定蛇的位置,然後移動蛇的身體和走私者。為了實現圖形,從走私者的新位置畫壹條蛇,然後因為沒有慶祝的理由,蛇和蛇在原位置的位置是壹個新的單位。所以,原來位置的蛇就不壹樣了。食物的出現和消失也畫矩形塊和有蓋矩形塊。
2.2.2數據結構設計和使用說明
開始:
遊戲是在圖形模式下運行的,所以第壹步是初始化圖形模式,然後開始有界面,像書的封面。我設置了遊戲的標題畫面,除了遊戲的標題畫面,我還設置了歡迎畫面。在標題畫面之後,也是遊戲運行部分的初始化,包括後臺運行的畫圖遊戲和遊戲中的壹些重要變量初始化。
運行部件:
這裏遊戲的核心部分包括更多的功能,也就是模塊。我先模擬壹下蛇的遊戲模式:壹條蛇突然短時間出現在世界上,運動神經異常,在自己的世界裏停不下來。多動癥唯壹的食物就是極度饑餓和貪吃;另外,在原因不明的情況下,美食天堂沒有淪陷,很可惜;餓英雄,不管無毒,不問食物的起源,食物的暴漲,食物的吃法。他們有壹種超乎想象的同化能力,讓食物迅速成為他身體的壹部分,讓他的身體變長。當它是第壹個吃的食物時,上帝要給它第二顆星,於是它吃了第二塊硬盤,於是它變長了,於是有了第三顆衛星...它的機身也被加長了,也不會忽視他的身體困擾——不方便轉身繼續吃飯,現在直接到了巴勒斯坦女王那裏,讓食物有了綠色通道。但是有壹天下午,它咬了自己壹口,它被記住是壹條蛇,然後就暈倒了(不是中毒),或者說是收了妳的食物,這時它失去了控制,撞到了墻上。
第壹個旋轉:第壹個,食物,第二個,蛇保持移動,第三步,檢查蛇是撞到自己還是墻,從第四個遊戲開始有兩個分支(a,b):
& gt第四步:蛇沒有碰到自己,也沒有碰到墻。蛇走在前面,畫出了蛇的動作。第五步,確定蛇是否吃了食物。如果蛇吃了食物,它的身體會變得很長,消失在原來的食物中。在第六步中,玩家輸入的控制命令使蛇在第七步的第二次叠代中向該循環的下壹次叠代中改變的方向移動;第壹輪;
b:第四步,蛇碰到他或者墻,停止遊戲。
最後壹節:
結束遊戲節目《GAME OVER》已經是約定俗成的規律,我的遊戲也不例外。除了遊戲結束畫面,我還設置了遊戲退出畫面,“善始善終。”
有了上面的大致劃分,我把整個程序分成了(13 +2)個模塊(其實就是函數)。
程序結構(流程圖)
圖2.1
根據需要和任務要求,計劃、輸入數據和輸出結果,確定存儲數據的數據結構。
C語言的數據結構中體現的數據類型,從而使C語言編程,應該規劃變量、數組、指針等。在整個計劃過程中使用的,以及它們的類型。這點很重要,以後選擇壹個不合適的變量或者數組會很困難。現在
分析貪吃蛇遊戲元素,然後在程序中描述相應的元素:
蛇:
描述:長度、顏色和位置。
數據類型對應的數據的份數:長度——雖然可以用坐標,但這種情況下計算量大,所以換算成更大的單位——並且用固定長度描述每壹個——整數部分;坐標;顏色-整數位置-X,y坐標。
補充說明:蛇的移動方向,蛇的壹生。/& gt;數據類型對應的數據:這些詞描述了與程序的鍵輸入部分接觸的部分遊戲結束判斷。只有四個方向:上和下。可以設置4個對應的整數:3,4,2,1。人生只有兩種情況:或者人生,對應的是0或者1。
食物:
描述:顏色,位置。
對應數據的數據類型:顏色設置是固定的,就不討論了。位置的x,y坐標。
補充說明:食物的存在。
對應數據類型的數據:這是為了避免重復的食物和設置,用繪圖功能接觸食物。只有兩個值:0或1(無食物或有食物)/& gt;其他元素:墻,因為它是作為背景存在於顯示屏上的,沒有描述實際的墻是以四條直線為界的,用坐標來描述。
變量:鍵盤輸入鍵(integer)作為壹個全局變量,經常需要使用循環變量自定義填充模式;說明文字字符數組,遊戲分數,遊戲速度(蛇速)。
圖2.2 snake不斷移動密鑰算法流程圖
2.2.4各模塊的功能及主要模塊的程序描述。
思想和算法實現的流程圖顯示:
Key-snake不停的移動Snakemove():
移動的蛇是壹條蛇。在下壹節中,它將替換壹條蛇的位置坐標。在下壹節之前,計算機前面的壹個位置成為位置坐標。上面位置坐標的蛇已經定義為壹個數組類型,壹組對應的位置坐標,假設有壹個節有i +1,從0到我,我的第壹部分的i-1的第壹個坐標,第壹個坐標系的i-1的i-2的第壹個坐標直到第壹個...坐標,也就是0,走私者的坐標朝某個方向變化,改變了蛇每壹段的長度。這條蛇協調旋轉的環,它需要繼續。
程序結果
運行程序,得到如下初始界面圖:
圖2.3程序結果圖
蛇用壹個小矩形來表示壹段的主體,每段長度為壹,並添加壹個矩形塊。兩個走私者說:
圖2.4程序結果圖
蛇不接觸自己或墻壁,而是繼續前進:
圖2.5程序結果圖
遊戲結束時,顯示“遊戲結束”。
圖2.6程序結果圖
2.3程序源代碼和註釋定義N 200
#包括
#包括
#包括
#定義左0x4b00
#定義右0x4d00
#向下定義0x5000
#最多定義0x4800
#定義ESC 0x011b
INT I,密鑰;解釋得分= 0;/*分數*/
誠信部gamespeed = 50000/*自己調整遊戲速度*/
食物
{
解讀x;/*食物橫坐標*/
解讀y;/*食物縱坐標*/釋義;/*確定食物的變量是否出現*/
}食物;/*食物結構*/
蛇
{
解釋x[N];
解釋y[N];
節點;/*結數*蛇/
& gt方向;/*蛇的移動方向*/
生活;/*蛇的壹生,0是生是死*/
}蛇;
無效的init(無效);/*圖形驅動程序*/
無效關閉(invalid);/*圖形結束*/
無效DrawK(無效);/*啟動屏幕*/
GAMEOVER無效;/*遊戲結束*/
無效遊戲(空);/*玩遊戲的具體流程*/
無效的PrScore(無效);/*輸出結果*/
/*主函數*/
& gt無效的主要(無效)
{
的init();/*圖形驅動程序*/
DrawK();/*啟動屏幕*/
game();/*玩遊戲的具體流程*/
close();/*圖表結束*/
}
/*圖形驅動程序*/
無效初始化(無效)
{GD =檢測,通用;
registerbgidriver(EGA VGA _ driver);
Initiatgraph (&GD,GM," C:\ \ Program files file \ \ winyes \ \ tc20h \ \ BGI));BR/>;clear device();
}
/*從屏幕左上角坐標(50,40)和右下角坐標(610460)開始繪制墻*/
無效DrawK(無效)
{
/* SetBkColor為“draw”(淺綠色);* /
set color(11);
setline style(SOLID _ LINE THICK _ WIDTH,0);/* Line */
(I = 50& lt= 600;+= 10)/ *畫壹面墻*/
{矩形(我40,我+10,49);/*頂部*/
矩形(I,451,10460);/*底部*/
}
(I = 40& lt= 450;+ = 10) {
長方形(50,我59歲,我10);/*左*/
矩形(601,I 610,I+10);/*右*/
& gt}
}
/*玩遊戲的具體流程*/
無效的遊戲
{
random();/*隨機數生成器*/BR/& gt;food . yes = 1;/* 1表示新的食物需要出現,食物0表示已經存在*/
snake . life = 0;/*活著*/
蛇。方向= 1;/*向右*/
snake . x[0]= 100;snake . y[0]= 100;/*蛇頭*/
snake . x[1]= 110;snake . y[1]= 100;
snake . node = 2;/*會話*/
PrScore();/*輸出分數*/
(1)/ *可以反復玩遊戲,按ESC退出*/
{
(kbhit())/ *移動身體*/
{
如果沒有鑰匙,蛇(食物。== 1)/ *需要新的食物*/
{
Rand ()% 400+60的food.x,
Food.y =蘭德()的350%+60;
同時(food.x% 10!= 0)/ *隨機食物,食物必須送到整個車廂,這樣蛇才能吃到*/
food . x++;
以及(10% food.y!= 0)
food . y++;
food . yes = 0;/*食物在屏幕上*/
} (food.yes == 0)/ *在屏幕上顯示食物*/
{
SetColor(綠色);
(food.x food.y,food.y-10 food.x +10)的矩形;}
(I = snake . node-1 & gt;0;-)/*蛇前進的每壹步都是蛇密鑰算法*/
{
snake . x[I]= snake . x[I-1];
snake.y [I] = snake.y [I-1]
}
/* 1,2,3,4右,左,中,蛇向四個方向移動被法官*/
開關(蛇形方向) (
case 1:snake . x[0]+= 10;打破;
案例二:snake . x[0]-= 10;打破;
案例三:蛇。y[0]-= 10;打破;
案例四:snake . y[0]+= 10;打破;
}
(I = 3;& lt蛇形節點;++)/*從蛇的第四季開始,我就開始做自己的判斷了。因為兩個走私犯,不可能改變第三季的*/
{
(snake . x[I]= = snake . x[0]& amp;& ampsnake.y [I] == snake.y [0])
{
game over();/*顯示失敗*/
蛇的命= 1;
打破;
}
}
(snake.x [0] 595 | |蛇。y 0]& lt;55 | |
snake . y[0]& gt;455)/ *如果蛇撞墻*/
{
game over();/*遊戲結束*/BR />snake . life = 1;/* Snake */
}
If (snake.life == 1)/ *這兩個判斷未來,如果蛇死了重新開始*/
打破;
(snake . x[0]= = food . x & amp;& ampSnake.y [0] == food.y)/ *吃完飯*/BR/& gt;{
的SetColor(0 );/*把東西放在屏幕上消除食物*/
矩形(food.x food.y +10 food.x,food . y-10);
snake . x[snake . node]=-20;snake . y[snake . node]=-20;
/*新的不可見位置,下壹個周期之前的位置*/
snake . node+;/*蛇的體長*/
food . yes = 1;/*新食物需要出現在屏幕上*/Score+= 10;
PrScore();/*輸出新分數*/
}
set color(4);/*畫壹條蛇*/
(I = 0;我& ltsnake .節點;+ +)
矩形(snake.x [I],snake.y [I],snake.x [I] 10。
snake . y[I]-10);
延遲(gamespeed);
的SetColor(0 );/*刪除最後壹個有黑蛇的*/
矩形(snake.x [snake.node-1],snake y [snake.node 1],
snake . x[snake . node-1]10,snake . y[snake . node-1]-10);/& gt;} / * ENDWHILE( kbhit)* /
(snake.life == 1)/ *如果蛇循環*/
休息;
key = BIOS key(0);/*接收”按鈕*/
(key == ESC)/ *如果按ESC退出*/
打破;
其他的
(==向上鍵&;& amp蛇,方向!4)
/*確定是否反方向移動*/snake . direction = 3;
其他的
(key = = right & amp蛇,方向!= 2)
snake . direction = 1;
其他的
(key = = LEFT & amp蛇,方向!= 1)
snake . direction = 2;
其他(向下箭頭= = &;& amp蛇.方向= 3)
snake . direction = 4;
} / * ENDWHILE(1)* /
}
/*結束遊戲*/
無效遊戲結束(無效)
{
clear device();
PrScore();
SetColor(紅色);
settextstyle (0,0,4);
outtextxy(200,200,“遊戲結束”);
的getch();
}
/*輸出結果*/
無效的PrScore(無效)
{
人物海峽[10];
Setfillstyle(黃色SOLID _ FILL);
吧(50,15,220,35);
set color(6);
settextstyle(0,0,2);
Sprintf(STR,"分數:% d ",等級);
outtextxy(55,20,STR);
}
/*圖表結束*/
無效結束(無效)
{
的getch();
closegraph();}
第三章課程設計概述
課程旨在培養學生綜合運用所學知識,發現、提出、分析和解決實際問題,鍛煉實踐能力。對於我們的工作能力來說,這是科學技術飛速發展的重要組成部分。今天,計算機在生活中應用的實際和具體的訓練和學習過程可以使它無處不在。因此,在21世紀的大學裏發展碩士課程是非常重要的。C語言是最常用、最強大的高級語言,所以用C語言設計課程是必不可少的。從課程設計回過頭來看,到目前為止,我們還是有很多感觸的,的確,要得到壹個完整的編程,從理論到實踐,在整整兩周的時間裏,妳可以學到很多東西,但是妳沒有鞏固之前學過的知識,學到很多書本上沒有學到的知識。通過本課程的設計,讓我們知道理論與實踐相結合是非常重要的。只有理論知識是不夠的。只有把理論和實踐知識結合起來,才能得出結論,從理論到真正服務於社會,從而提高自己的實踐技能和獨立思考能力。設計過程中遇到的問題可以說是非常棘手。畢竟第壹次做難免會遇到各種各樣的問題,但是在設計過程中會發現自己的不足,對壹些之前學過的知識理解不夠深入,比如結構、指針、鏈表...通過本課程設計,
之後,我們會重新思考之前所學的內容。
我玩蛇的遊戲。壹個很簡單,但對我來說對初學者來說很難。另外是第壹次做課程設計,所以第壹個下午,壹個下午,騰出空間,但是沒有進展。最重要的是知道從哪裏開始。這時候我才知道,學校的老師都在耐心的教導如何珍惜時間。唯壹的遺憾就是上課不認真。但是現在已經晚了,還好還有足夠的時間重新檢查賬本。結構,尤其是手,幾乎是空白的。不過經過幾天的努力,主要看了課本上的知識,基本掌握了知識點,接下來就是開始正式的編譯程序了。但我畢竟是新手,還是不知道怎麽入手,於是網上壹個類似的程序,經過仔細學習,終於了解了C語言編程的基本流程和方法。
幾經周折,終於開始正式編程。
編程是壹件很枯燥的事情,但是做完工作,拿到學分的壓力之後,壹定要自己堅持下去,強勢突破。按照老師的說法,模塊化的思路是分段寫的。編程是壹件高精度、單壹模式的事情。稍有不慎就會影響全局,但也可能因為壹個小小的錯誤,導致整個程序無法運行。所以,小心謹慎是非常重要的壹步。剛開始很無聊,但是當壹個程序運行成功,就不行了,那種成就感是無與倫比的。經過幾天的努力,我終於完成了這個項目。雖然節目還有很多錯誤和漏洞,但我還是很開心。反正是自己的勞動,自己努力的結果,但也是
c語言學習是證明妳進步的實際操作。
通過這次的課程設計,C語言,我有了更好的認識和理解,明白它重在實踐,不斷的操作機器,為了更好的學習它,我也發現了很多不足,首先是自己的指法不夠,經常按錯字母,通過學習我有所提高;C語言的壹些標準庫函數不是很懂,函數調用的使用不當我也很熟悉,C語言的錯誤我也經常看不懂。通過學習實踐,我認識到學習操作計算機要重在實踐,不能只學習C語言或其他語言,還要學習其他計算機知識。
在學習的過程中,我會更加註重實際操作,這對學習和制作自己的電腦都有好處。
在課程設計的過程中,在獲得知識和能力的同時,也學到了很多人生哲學,如何規劃,如何實施這個規劃,如何掌握如何在使用過程中克服心理上的負面情緒。