版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 信息技術學院本科課程設計報告</p><p><b> 課程設計題目</b></p><p> 學 生 姓 名: </p><p> 學 院: 信息技術學院 </p><p> 專
2、 業(yè): 信息管理與信息系統(tǒng) </p><p> 班 級: </p><p> 學 號: </p><p> 指 導 教 師: </p><p>
3、 完 成 日 期: </p><p><b> 題目(問題)描述</b></p><p> 貪吃蛇小游戲程序設計</p><p> 圖1 貪吃蛇系統(tǒng)界面</p><p><b> 功能分析</b></p><
4、;p> 貪吃蛇游戲是一個經(jīng)典小游戲,一條蛇在封閉圍墻里,圍墻里隨機出現(xiàn)一個食物,通過按鍵盤四個光標鍵控制蛇向上下左右四個方向移動,蛇頭撞倒食物,則食物被吃掉,蛇身體長一節(jié),同時記10分,接著又出現(xiàn)食物,等待蛇來吃,如果蛇在移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結束。</p><p><b> 系統(tǒng)設計</b></p><p><b> 程序總
5、體結構</b></p><p> 圖2貪吃蛇程序系統(tǒng)的構圖</p><p><b> 2.界面設計</b></p><p> 如圖,通過W、S、A、D、space鍵進行操作</p><p><b> 3.輸入方式設計</b></p><p> A 用W、
6、S、A、D、鍵控制蛇的上下左右移動,space鍵停止,esc鍵結束。</p><p> B 游戲目標:操縱屏幕上那條可愛的小蛇,在方框中不停吃豆豆,而每吃一個豆豆,蛇的身體都變的更長一些,即增加一顆星星。游戲的難度也會隨之加大。</p><p> C 游戲終止:終止條件1——蛇頭撞到墻上;終止條件2——蛇身形成一個圈,也就是蛇頭碰到自身的任何一處</p><p>
7、; 4.重要數(shù)據(jù)的數(shù)據(jù)結構設計</p><p><b> 5.函數(shù)設計</b></p><p><b> 6.函數(shù)調用圖</b></p><p><b> 7. 實體屬性圖</b></p><p> 關鍵技術、難點及其解決方法</p><p>
8、;<b> 測試方法</b></p><p><b> 總結</b></p><p><b> 附錄1</b></p><p><b> 程序源代碼</b></p><p> #include <windows.h></p>
9、;<p> #include <stdlib.h></p><p> #include <time.h></p><p> #include <stdio.h></p><p> #include <string.h></p><p> #include <coni
10、o.h></p><p> #define N 21</p><p> int apple[3];</p><p> char score[3];</p><p> char tail[3]; </p><p> void gotoxy(int x, int y) //輸出坐標 </p>
11、;<p><b> {</b></p><p> COORD pos;</p><p> pos.X = x; </p><p> pos.Y = y;</p><p> SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
12、</p><p><b> }</b></p><p> void color(int b) //顏色函數(shù) </p><p><b> {</b></p><p> HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; &
13、lt;/p><p> SetConsoleTextAttribute(hConsole,b) ;</p><p><b> } </b></p><p> int Block(char head[2]) //判斷出界 </p><p><b> {</b></p><p&
14、gt; if ((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N))</p><p><b> return 1;</b></p><p><b> return 0;</b></p><p><b>
15、}</b></p><p> int Eat(char snake[2]) //吃了蘋果 </p><p><b> {</b></p><p> if ((snake[0] == apple[0]) && (snake[1] == apple[1]))</p><p><b&
16、gt; {</b></p><p> apple[0] = apple[1] = apple[2] = 0;</p><p> gotoxy(N+44,10);</p><p> color(13);</p><p> printf("%d",score[0]*10);</p><
17、p> color(11);</p><p><b> return 1;</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><
18、;p> void Draw(char **snake, int len) //蛇移動 </p><p><b> {</b></p><p> if (apple[2]) {</p><p> gotoxy(apple[1] * 2, apple[0]);</p><p> color(12);&l
19、t;/p><p> printf("●");</p><p> color(11);</p><p><b> }</b></p><p> gotoxy(tail[1] * 2, tail[0]);</p><p> if (tail[2]) </p>&
20、lt;p> { color(14);</p><p> printf("★");</p><p> color(11);</p><p><b> }</b></p><p><b> else </b></p><p> printf
21、("■");</p><p> gotoxy(snake[0][1] * 2, snake[0][0]);</p><p> color(14);</p><p> printf("★");</p><p> color(11);</p><p> putchar(
22、39;\n');</p><p><b> }</b></p><p> char** Move(char **snake, char dirx, int *len) //控制方向 </p><p><b> {</b></p><p> int i, full = Eat(sn
23、ake[0]);</p><p> memcpy(tail, snake[(*len)-1], 2);</p><p> for (i = (*len) - 1; i > 0; --i) </p><p> memcpy(snake[i], snake[i-1], 2);</p><p> switch (dirx) </
24、p><p><b> { </b></p><p> case 'w': case 'W': --snake[0][0]; break;</p><p> case 's': case 'S': ++snake[0][0]; break;</p><p>
25、 case 'a': case 'A': --snake[0][1]; break;</p><p> case 'd': case 'D': ++snake[0][1]; break;</p><p> default: ;</p><p><b> } </b><
26、;/p><p> if (full) </p><p><b> { </b></p><p> snake = (char **)realloc(snake, sizeof(char *) * ((*len) + 1));</p><p> snake[(*len)] = (char *)malloc(size
27、of(char) * 2);</p><p> memcpy(snake[(*len)], tail, 2);</p><p><b> ++(*len);</b></p><p> ++score[0];</p><p> if(score[3] < 16) </p><p>
28、++score[3];</p><p> tail[2] = 1;</p><p><b> }</b></p><p><b> else </b></p><p> tail[2] = 0;</p><p> return snake;</p>&
29、lt;p><b> }</b></p><p> void init(char plate[N+2][N+2], char ***snake_x, int *len) //初始化 </p><p><b> {</b></p><p><b> int i, j;</b></p&
30、gt;<p> char **snake = NULL;</p><p><b> *len = 3;</b></p><p> score[0] = score[3] =3;</p><p> snake = (char **)realloc(snake, sizeof(char *) * (*len));</p&
31、gt;<p> for (i = 0; i < *len; ++i)</p><p> snake[i] = (char *)malloc(sizeof(char) * 2);</p><p> for (i = 0; i < 3; ++i) </p><p><b> {</b></p><
32、;p> snake[i][0] = N/2 + 1;</p><p> snake[i][1] = N/2 + 1 + i;</p><p><b> } </b></p><p> for (i = 1; i <= N; ++i) </p><p> for (j = 1; j <= N;
33、++j) </p><p> plate[i][j] = 1;</p><p> apple[0] = rand()%N + 1; apple[1] = rand()%N + 1;</p><p> apple[2] = 1;</p><p> for (i = 0; i < N + 2; ++i) </p>&l
34、t;p><b> {</b></p><p> gotoxy(0, i);</p><p> for (j = 0; j < N + 2; ++j) </p><p><b> {</b></p><p> switch (plate[i][j]) </p>&l
35、t;p><b> {</b></p><p><b> case 0: </b></p><p> color(12);printf("□");color(11); continue;</p><p> case 1: printf("■"); continue;<
36、;/p><p> default: ;</p><p><b> }</b></p><p><b> }</b></p><p> putchar('\n');</p><p><b> } </b></p><
37、;p> for (i = 0; i < (*len); ++i)</p><p><b> {</b></p><p> gotoxy(snake[i][1] * 2, snake[i][0]);</p><p> printf("★");</p><p><b> }
38、 </b></p><p> putchar('\n');</p><p> *snake_x = snake;</p><p><b> }</b></p><p> void Manual()</p><p><b> {</b>&l
39、t;/p><p> gotoxy(N+30,2);</p><p> color(10);</p><p> printf("按 W S A D 移動方向");</p><p> gotoxy(N+30,4);</p><p> printf("按 space 鍵暫停");
40、 </p><p> gotoxy(N+30,8);</p><p> color(11);</p><p> printf("歷史最高分為: ");</p><p> color(12);</p><p> gotoxy(N+44,8);</p><p> pr
41、intf("%d",score[1]*10);</p><p> color(11);</p><p> gotoxy(N+30,12);</p><p> printf("你現(xiàn)在得分為: 0"); </p><p><b> }</b></p>
42、<p> int File_in() //取記錄的分數(shù) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> if((fp = fopen("C:\\tcs.txt","a+")) == NULL
43、)</p><p><b> {</b></p><p> gotoxy(N+18, N+2);</p><p> printf("文件不能打開\n");</p><p><b> exit(0);</b></p><p><b> }
44、</b></p><p> if((score[1] = fgetc(fp)) != EOF);</p><p><b> else</b></p><p> score[1] = 0;</p><p><b> return 0;</b></p><p>
45、;<b> }</b></p><p> int File_out() //存數(shù)據(jù) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> if(score[1] > score[0]) </p
46、><p> {gotoxy(10,10);</p><p> color(12);</p><p> puts("闖關失敗 加油耶");</p><p> gotoxy(0,N+2); </p><p><b> return 0;</b></p><
47、p><b> }</b></p><p> if((fp = fopen("C:\\tcs.txt","w+")) == NULL)</p><p><b> {</b></p><p> printf("文件不能打開\n");</p>
48、<p><b> exit(0);</b></p><p><b> }</b></p><p> if(fputc(--score[0],fp)==EOF)</p><p> printf("輸出失敗\n");</p><p> gotoxy(10,10)
49、;</p><p> color(12);</p><p> puts("恭喜您打破記錄"); </p><p> gotoxy(0,N+2);</p><p><b> return 0;</b></p><p><b> }</b></
50、p><p> void Free(char **snake, int len) //釋放空間 </p><p><b> {</b></p><p><b> int i;</b></p><p> for (i = 0; i < len; ++i) </p><
51、p> free(snake[i]);</p><p> free(snake);</p><p><b> }</b></p><p> int main(void)</p><p><b> {</b></p><p><b> int len;
52、</b></p><p> char ch = 'g';</p><p> char a[N+2][N+2] = {{0}};</p><p> char **snake;</p><p> srand((unsigned)time(NULL));</p><p> color(1
53、1);</p><p> File_in();</p><p> init(a, &snake, &len);</p><p><b> Manual();</b></p><p> while (ch != 0x1B) // 按 ESC 結束 </p><p><
54、;b> { </b></p><p> Draw(snake, len);</p><p> if (!apple[2]) {</p><p> apple[0] = rand()%N + 1;</p><p> apple[1] = rand()%N + 1;</p><p> appl
55、e[2] = 1;</p><p><b> }</b></p><p> Sleep(200-score[3]*10);</p><p> setbuf(stdin, NULL);</p><p> if (kbhit())</p><p><b> {</b>&
56、lt;/p><p> gotoxy(0, N+2);</p><p> ch = getche();</p><p><b> }</b></p><p> snake = Move(snake, ch, &len); </p><p> if (Block(snake[0])==1
57、) </p><p><b> {</b></p><p> gotoxy(N+2, N+2);</p><p> puts("你輸了");</p><p> File_out();</p><p> Free(snake, len);</p><
58、p><b> getche();</b></p><p><b> exit(0); </b></p><p> } </p><p><b> }</b></p><p> Free(snake, len);<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論