2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  微機原理與接口技術課程設計報告</p><p>  設計題目: 貪吃蛇游戲</p><p>  姓名: </p><p>  班級: 自動化 </p><p>  學號: </p><p>  同組人:

2、</p><p>  時間: 2010年12月 </p><p><b>  貪吃蛇游戲</b></p><p>  摘要:貪吃蛇游戲,運行游戲后顯示提示界面,按任意鍵進入游戲,按Esc鍵退出程序。進入游戲后有兩遍刷屏,之后進入游戲,由方向鍵控制蛇的運動,尋找食物,吃到食物得分,撞到墻壁或蛇身游戲結束,按空格鍵重新進入游戲,按Esc鍵回到

3、提示界面,按任意鍵繼續(xù)進入游戲,按Esc退出程序。</p><p><b>  目錄</b></p><p>  1.設計任務和要求………………………………3</p><p>  2.設計小組成員及分工…………………………3</p><p>  3.軟件編程………………………………………3</p><

4、p>  3.1 軟件流程圖……………………………3</p><p>  3.2 匯編語言程序…………………………4</p><p>  4.程序運行結果…………………………………33</p><p>  5.設計過程中出現(xiàn)的問題及解決方法…………33</p><p>  6.設計總結………………………………………33</p>

5、<p>  7.參考文獻………………………………………34</p><p><b>  一、設計任務和要求</b></p><p>  設計一個匯編語言的貪吃蛇游戲簡要說明:用一個邊框作為基本顯示屏,連續(xù)移動的方格表示一條蛇,用任意出現(xiàn)的一個方格表示食物,用4條線表示“墻”,用四個按鍵控制蛇的運動方向,完成貪食蛇游戲,蛇撞“墻”、邊或者游戲時間到,則游戲

6、結束。</p><p>  1. 食物出現(xiàn)的地方是隨機的;</p><p>  2.顯示得分情況,每吃掉一個食物就加1100分;</p><p>  3. 游戲時間不限制。</p><p>  4. 選做:增加游戲難度或自擬其它功能。</p><p>  二、設計小組成員及分工</p><p>

7、<b>  成員:鄭瑋 蘇丹</b></p><p>  分工:鄭瑋:調試修改程序,擬出課程設計報告內容</p><p>  蘇丹:寫出并整理報告內容</p><p><b>  軟件編程</b></p><p><b>  1.軟件流程圖</b></p>&l

8、t;p><b>  2.匯編語言程序</b></p><p>  .MODEL SMALL</p><p>  ;******************************************************************************************</p><p>  .STACK

9、 200</p><p>  ;******************************************************************************************</p><p><b>  .DATA</b></p><p>  ;蛇的參數(shù)以及游戲參數(shù)</p><p&g

10、t;  LEN DB 5 ;蛇的長度</p><p>  LIFE DB 1 ;蛇的生命</p><p>  BODY DW 200 DUP(0) ;蛇的身體位置</p><p>  DIRECTION DW 256 ;(0,1)(O,-1)(1,0)(-1,0)<

11、;/p><p>  SCORE DB 'SCORE000000' ;得分</p><p>  SNAKE_COLOR DB 09 ;蛇顏色</p><p>  SPEED DB 0 ;速度</p><p>  GAMEOVER DB 0 ;游戲結束標記&l

12、t;/p><p>  POINT DB 0 ;得分數(shù)</p><p>  FOOD_COLOR DB 04 ;食物色</p><p>  FOODX DW ? ;食物坐標 </p><p>  FOODY DW ?</p><p>  SEED

13、 DW 200 ;隨即數(shù)種子</p><p>  ;******************************************************************************************</p><p><b>  ;顯示方面的參數(shù) </b></p><p>  TOPLIN

14、E DW 20 ;上邊界</p><p>  LEFTLINE DW 60 ;左邊界</p><p>  CUT_X DW 4 ;每格寬</p><p>  CUT_Y DW 3 ;每格長</p><p>  MAX_X DW 49 ;最大

15、格數(shù)(橫)</p><p>  MAX_Y DW 49 ;最大格數(shù)(縱)</p><p>  MSG2 DB 'ZI DONG HUA 08-3 BAN ZHENG WEI AND SU DAN MODIFY '</p><p>  MSG3 DB 'GAME OVER!&#

16、39;</p><p>  MSG4 DB 'PRESS ANY KEY TO START! ESC FOR EXIT'</p><p>  MSG5 DB 'ESC FOR BACK, SPACE FOR RETRY'</p><p>  FLASH DB 04H ;字體顏

17、色(紅)</p><p>  GREEN DB 02H ;字體顏色(綠)</p><p>  YELLOW DB 8EH ;字體顏色(黃)</p><p>  WHITE DB 0FH ;字體顏色(白)</p><p>  ;******************************

18、************************************************************</p><p><b>  ;鍵盤掃描碼</b></p><p>  LEFT EQU 4BH </p><p>  RIGHT EQU 4DH</p><p> 

19、 UP EQU 48H</p><p>  DOWN EQU 50H</p><p>  QUIT EQU 01H</p><p>  SPACE EQU 39H</p><p>  ;******************************************

20、************************************************</p><p>  ;LOGO BY BSASCII</p><p>  TIT1 DB ' ZZZZZZZZZZZZZ DDDDDDDD HHH HHH ' </p><p>  TIT2 DB ' ZZZZZZZZZZZZZ

21、DDDDDDDDDD HHH HHH'</p><p>  TIT3 DB ' ZZZ DDD DDD HHH HHH'</p><p>  TIT4 DB ' ZZZ DDD DDD HHH HHH' </p><p>  TIT5 D

22、B ' ZZZ DDD DDD HHH HHH'</p><p>  TIT6 DB ' ZZZ DDD DDD HHH HHH'</p><p>  TIT7 DB ' ZZZ DDD DDD HHH HHH'<

23、/p><p>  TIT8 DB ' ZZZ DDD DDD HHH HHH'</p><p>  TIT9 DB ' ZZZ DDD DDDHHHHHHHHHH'</p><p>  TIT10 DB ' ZZZ DDD

24、DDDHHHHHHHHHH'</p><p>  TIT11 DB ' ZZZ DDD DDD HHH HHH '</p><p>  TIT12 DB ' ZZZ DDD DDD HHH HHH '</p><p>  TIT13 DB '

25、; ZZZ DDD DDD HHH HHH '</p><p>  TIT14 DB ' ZZZ DDD DDD HHH HHH '</p><p>  TIT15 DB ' ZZZ DDD DDD HHH HHH '</p&

26、gt;<p>  TIT16 DB 'ZZZZZZZZZZZZZZZ DDDDDDDDDDHHH HHH'</p><p>  TIT17 DB 'ZZZZZZZZZZZZZZZ DDDDDDDD HHH HHH'</p><p>  ;**********************************************

27、********************************************</p><p><b>  .CODE</b></p><p>  MAIN PROC FAR</p><p>  MOV AX , @DATA</p><p>  MOV DS , AX</p&g

28、t;<p>  START: MOV AH , 00</p><p>  MOV AL , 12H</p><p>  INT 10H ;設置圖形模式640*480</p><p>  CALL SHOW_TITLE ;顯示LOGO</p><p>  CALL SHOW_START

29、_MSG ;顯示開始提示信息</p><p>  MOV AH , 00H</p><p>  INT 16H ;等待按鍵</p><p>  CMP AH , QUIT </p><p>  JZ DOS ;ESC則退出,否則進入游戲</p><p>  GAME_START:MOV

30、 AH , 00;設置圖形模式320*200,游戲在此模式下運行</p><p>  MOV AL , 13H</p><p>  INT 10H </p><p>  MOV CL , 10 ;邊框顏色</p><p>  MOV SI , 59 </p><p>

31、;  MOV BX , 19</p><p>  MOV DI , 260</p><p>  MOV DX , 170</p><p>  CALL REC ;打印邊框</p><p>  CALL CLEAR_AREA ;游戲區(qū)域清空(效果)</p><p>  CALL IN

32、IT_SNAKE ;初始化蛇</p><p>  CALL GETFOOD ;得到第一個食物</p><p>  CALL RUN_SNAKE ;開始運動蛇</p><p>  EXIT: MOV DX , 0C0FH ;設置光標</p><p>  CALL SET

33、GB</p><p>  MOV BL , FLASH ;顯示游戲結束</p><p>  LEA BP , MSG3</p><p>  MOV CX , 11</p><p>  CALL MSG</p><p>  MOV DX , 1605H</p><

34、p>  MOV BL , WHITE ;顯示提示信息</p><p>  LEA BP , MSG5</p><p>  MOV CX , 29</p><p>  CALL MSG</p><p>  EXIT_LOOP: MOV AH , 00H</p><p>  IN

35、T 16H ;等待按鍵</p><p>  CMP AH , QUIT</p><p>  JZ START</p><p>  CMP AH , SPACE</p><p>  JZ GAME_START</p><p>  JMP EXIT_LOOP ;返回開始<

36、;/p><p>  DOS: MOV AH , 00</p><p>  MOV AL , 03</p><p>  INT 10H ;設置文本模式</p><p>  MOV AH , 4CH</p><p>  INT 21H ;退出到DOS</p><

37、p><b>  MAIN ENDP</b></p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: SHOW_START_MSG</p><p>  ;功能:

38、 顯示開始提示信息</p><p>  ;傳遞參數(shù): </p><p><b>  ;函數(shù)返回: 空</b></p><p>  ;******************************************************************************************</p>

39、<p>  SHOW_START_MSG PROC NEAR</p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>

40、  PUSH DX</b></p><p><b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p>  MOV DX , 190CH ;設置光標</p><p>  CALL SETGB</p>

41、<p>  MOV BL , WHITE</p><p>  LEA BP , MSG2 ;顯示作者信息</p><p>  MOV CX , 54</p><p>  CALL MSG ;顯示字符串</p><p>  MOV DX , 1616H ;設置光標</p>

42、;<p>  CALL SETGB</p><p>  MOV BL , 0A8H</p><p>  LEA BP , MSG4 ;顯示提示信息</p><p>  MOV CX , 36</p><p>  CALL MSG ;顯示字符串</p><p><

43、;b>  POP DI</b></p><p><b>  POP SI</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP B

44、X</b></p><p>  POP AX </p><p><b>  RET</b></p><p>  SHOW_START_MSG ENDP</p><p>  ;***********************************************************

45、*******************************</p><p>  ;函數(shù)名: CUTSNAKE</p><p>  ;功能: 顯示蛇一段</p><p>  ;傳遞參數(shù): </p><p>  ; SI/DI 游戲空間行/游戲空間列(50*50)</p><p><b>  ;

46、函數(shù)返回: 空</b></p><p>  ;******************************************************************************************</p><p>  CUTSNAKE PROC NEAR</p><p><b>  PUSH AX<

47、;/b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p><b>  PUSH SI</b></p>

48、;<p><b>  PUSH DI</b></p><p>  MOV CL , SNAKE_COLOR;置顏色</p><p>  MOV AX,DI;取坐標值</p><p>  MUL CUT_Y;乘每格長</p><p>  ADD AX,TOPLINE ;加

49、上邊界</p><p>  MOV BX , AX </p><p>  ADD AX , 2 </p><p>  MOV DX , AX</p><p><b>  PUSH BX</b></p><p><b>  PUSH DX</b>

50、;</p><p>  MOV AX,SI;取坐標值</p><p>  MUL CUT_X;乘每格寬</p><p>  ADD AX,LEFTLINE ;加左邊界</p><p>  MOV SI , AX</p><p>  ADD AX , 3</p><

51、;p>  MOV DI , AX</p><p><b>  POP DX</b></p><p><b>  POP BX</b></p><p>  CALL REC ;REC的參數(shù)是CL顏色 SI左邊 BX上邊 DI右邊 DX下邊</p><p><b>

52、;  POP DI</b></p><p><b>  POP SI</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX<

53、/b></p><p>  POP AX </p><p><b>  RET</b></p><p>  CUTSNAKE ENDP</p><p>  ;**********************************************************************

54、********************</p><p>  ;函數(shù)名: CUTFOOD</p><p>  ;功能: 顯示食物</p><p>  ;傳遞參數(shù): </p><p>  ; SI/DI 游戲空間行/游戲空間列(50*50)</p><p><b>  ;函數(shù)返回: 空</b

55、></p><p>  ;******************************************************************************************</p><p>  CUTFOOD PROC NEAR</p><p><b>  PUSH AX</b></p

56、><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p><b>  PUSH SI</b></p><p>&

57、lt;b>  PUSH DI</b></p><p>  MOV CL , FOOD_COLOR ;置顏色</p><p>  MOV AX,DI;取坐標值</p><p>  MUL CUT_Y;乘每格長</p><p>  ADD AX,TOPLINE ;加上邊界</p>

58、<p>  MOV BX , AX</p><p>  ADD AX , 2</p><p>  MOV DX , AX</p><p>  PUSH BX </p><p><b>  PUSH DX</b></p><p>  MOV AX,

59、SI;取坐標值</p><p>  MUL CUT_X;乘每格寬</p><p>  ADD AX,LEFTLINE ;加左邊界</p><p>  MOV SI , AX</p><p>  ADD AX , 3</p><p>  MOV DI , AX</p>

60、<p><b>  POP DX</b></p><p><b>  POP BX</b></p><p>  CALL REC ;REC的參數(shù)是CL顏色 SI左邊 BX上邊 DI右邊 DX下邊</p><p><b>  POP DI</b></p>

61、<p><b>  POP SI</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p>  POP

62、 AX </p><p><b>  RET</b></p><p>  CUTFOOD ENDP</p><p>  ;******************************************************************************************</p>&l

63、t;p>  ;函數(shù)名: CLEARCUT</p><p><b>  ;功能: 清除格</b></p><p>  ;傳遞參數(shù): </p><p>  ; SI/DI 游戲空間行/游戲空間列(50*50)</p><p><b>  ;函數(shù)返回: 空</b></p>

64、<p>  ;******************************************************************************************</p><p>  CLEARCUT PROC NEAR</p><p><b>  PUSH AX</b></p><p>

65、<b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p><b>  PUSH SI</b></p><p><b>  PUSH

66、 DI</b></p><p>  MOV CL, 0 ;置顏色(黑)</p><p>  MOV AX,DI ;取坐標值</p><p>  MUL CUT_Y ;乘每格長</p><p>  ADD AX,TOPLINE ;加上邊界</p><p>  MOV

67、BX , AX</p><p>  ADD AX , 2</p><p>  MOV DX , AX</p><p><b>  PUSH BX</b></p><p><b>  PUSH DX</b></p><p>  MOV AX,SI;取坐

68、標值</p><p>  MUL CUT_X;乘每格寬</p><p>  ADD AX,LEFTLINE ;加左邊界</p><p>  MOV SI , AX</p><p>  ADD AX , 3</p><p>  MOV DI , AX</p><p

69、><b>  POP DX</b></p><p><b>  POP BX</b></p><p>  CALL REC</p><p><b>  POP DI</b></p><p><b>  POP SI</b>

70、</p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p>  POP AX </p><p><b>

71、  RET</b></p><p>  CLEARCUT ENDP</p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: RAND </p><p&g

72、t;  ;功能: 產生指定范圍大小的隨機數(shù)</p><p>  ;傳遞參數(shù): </p><p>  ; SI 數(shù)字的范圍最大值+1 </p><p>  ;函數(shù)返回: AX 返回隨機數(shù)的值</p><p>  ;**********************************************************

73、********************************</p><p>  RAND PROC</p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b&

74、gt;</p><p><b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p><b>  STI</b></p><p>  MOV AH,0 ;讀時鐘計數(shù)器值</p><p>  INT

75、 1AH</p><p>  MOV AX , SEED</p><p>  ADD AX , DX</p><p>  AND AX , 8FFFH</p><p>  MOV SEED , AX ;產生新種子</p><p>  MOV DX , 0</p>

76、<p>  MOV BX , SI ;指定隨機數(shù)的范圍</p><p>  DIV BX </p><p>  MOV AX , DX</p><p><b>  POP DI</b></p><p><b>  POP SI</b>&

77、lt;/p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  RET</b></p><p>  

78、RAND ENDP</p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: GETFOOD </p><p>  ;功能: 產生新食物,即隨機產生一組49*49的坐標<

79、/p><p>  ;傳遞參數(shù): </p><p><b>  ; </b></p><p>  ;函數(shù)返回: FOODX與FOODY的值</p><p>  ;***************************************************************************

80、***************</p><p>  GETFOOD PROC</p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p>&l

81、t;p><b>  PUSH DX</b></p><p><b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p>  MOV SI,50;置隨機數(shù)范圍(最大值+1)</p><p>  CALL RA

82、ND ;產生隨機數(shù)</p><p>  MOV FOODX,AX ;賦予食物坐標X</p><p>  MOV SI,50;置隨機數(shù)范圍(最大值+1)</p><p>  CALL RAND ;產生隨機數(shù)</p><p>  MOV FOODY,AX ;賦予食物坐標Y</p>&

83、lt;p>  MOV SI,FOODX</p><p>  MOV DI,FOODY</p><p>  CALL CUTFOOD ;畫食物</p><p><b>  POP DI</b></p><p><b>  POP SI</b></

84、p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p>

85、<b>  RET</b></p><p>  GETFOOD ENDP</p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: DELAY</p>

86、<p><b>  ;功能: 延時</b></p><p>  ;傳遞參數(shù): </p><p><b>  ;函數(shù)返回: </b></p><p>  ;************************************************************************

87、******************</p><p>  DELAY PROC</p><p><b>  PUSH AX</b></p><p>  PUSH CX </p><p>  MOV AX , 0AH</p><p>  SUB AX , CX&l

88、t;/p><p>  MOV CX , AX</p><p>  M3_1: PUSH CX ;外層循環(huán)來控制延時速度</p><p>  MOV CX , 5000 </p><p>  M3_2: IN AL , 61H ;讀8255A的B口</p>&

89、lt;p>  AND AL , 10H</p><p>  CMP AL , AH</p><p>  JE M3_1</p><p>  MOV AH , AL</p><p>  LOOP M3_2</p><p><b>  POP CX</b>&l

90、t;/p><p>  LOOP M3_1 </p><p><b>  POP CX</b></p><p><b>  POP AX</b></p><p><b>  RET</b></p><p>  DELAY ENDP&l

91、t;/p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: CHECK_KEY</p><p>  ;功能: 處理鍵盤響應</p><p>  ;傳遞參數(shù):

92、無</p><p>  ;函數(shù)返回: DIRECTION的值,GAMEOVER的值(按ESC時)</p><p>  ;******************************************************************************************</p><p>  CHECK_KEY PROC</p&g

93、t;<p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p><

94、;b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p>  MOV AH , 01H </p><p>  INT 16H </p><p>  JZ CHECK_NOKEY ;如果沒有按鍵就繼續(xù)</p>&

95、lt;p>  MOV AH , 00H ;取得掃描碼 </p><p>  INT 16H </p><p>  CMP AH , LEFT ;往左移動 </p><p>  JZ CHECK_LEFT</p><p>  CMP AH , RIGHT

96、 ;往右移動</p><p>  JZ CHECK_RIGHT</p><p>  CMP AH , UP;往上移動</p><p>  JZ CHECK_UP</p><p>  CMP AH , DOWN ;往下移動 </p><p>  JZ CHECK_DO

97、WN</p><p>  CMP AH , QUIT ;結束游戲</p><p>  JZ CHECK_QUIT</p><p>  JMP CHECK_NOKEY</p><p>  CHECK_LEFT:</p><p>  MOV AH , -1 ;(-1

98、,0)</p><p>  MOV AL , 0</p><p>  MOV BX , AX ;檢查是否反向</p><p>  ADD BX , DIRECTION</p><p>  JZ CHECK_NOKEY</p><p>  MOV DIRECTION ,

99、AX</p><p>  JMP CHECK_NOKEY</p><p>  CHECK_RIGHT:</p><p>  MOV AH , 1 ;(1,0)</p><p>  MOV AL , 0</p><p>  MOV BX , AX ;檢查是否反向&

100、lt;/p><p>  ADD BX , DIRECTION</p><p>  JZ CHECK_NOKEY</p><p>  MOV DIRECTION , AX</p><p>  JMP CHECK_NOKEY</p><p>  CHECK_UP: MOV AH , 0

101、 ;(0,-1)</p><p>  MOV AL , -1</p><p>  MOV BX , DIRECTION ;檢查是否反向</p><p>  SUB BL , 1</p><p>  JZ CHECK_NOKEY </p><p>  MOV DIRECTI

102、ON , AX</p><p>  JMP CHECK_NOKEY</p><p>  CHECK_DOWN:MOV AH , 0 ;(0,1)</p><p>  MOV AL , 1 </p><p>  MOV BX , DIRECTION ;檢查是否反向</p><p

103、>  ADD BL , 1</p><p>  JZ CHECK_NOKEY</p><p>  MOV DIRECTION , AX</p><p>  JMP CHECK_NOKEY</p><p>  CHECK_QUIT:JMP CHECK_EXIT</p><p>  C

104、HECK_EXIT:MOV AL,1 ;按下ESC鍵的情況</p><p>  MOV GAMEOVER,AL</p><p>  CHECK_NOKEY:</p><p><b>  POP DI</b></p><p><b>  POP SI</b></p>

105、<p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><b

106、>  RET</b></p><p>  CHECK_KEY ENDP</p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: CHECK_DIE</p>

107、<p>  ;功能: 處理死亡的響應</p><p>  ;傳遞參數(shù): SI,DI為當前蛇頭部的坐標</p><p>  ;函數(shù)返回: 蛇參數(shù)的值</p><p>  ;***************************************************************************************

108、***</p><p>  CHECK_DIE PROC</p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b

109、>  PUSH DX</b></p><p><b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p>  CMP SI , 50 ;檢查是否到達邊界</p><p>  JZ DEAD<

110、/p><p>  CMP SI , 255</p><p>  JZ DEAD</p><p>  CMP DI , 50</p><p>  JZ DEAD</p><p>  CMP DI , 255</p><p>  JZ DEAD</p>

111、;<p>  MOV AX,SI;檢查是否接觸蛇身</p><p>  MOV DH,AL;DX中獲得當前坐標</p><p>  MOV AX,DI</p><p>  MOV DL,AL</p><p>  XOR CX , CX</p><p>  MOV CL

112、, LEN</p><p>  SUB CL , 1 </p><p>  MOV BX , OFFSET BODY </p><p>  CHECK_DIE_LOOP: </p><p>  MOV AX , [BX+2]</p><p>  CMP AX , DX ;取出

113、蛇身信息進行比較</p><p>  JZ DEAD ;觸及蛇身即死亡 </p><p>  DEC CL </p><p>  JZ NEXT</p><p>  ADD BX , 2</p><p>  JMP CHECK_DIE_LOOP</p><p&g

114、t;  DEAD: MOV AL,1 ;死亡即賦GAMEOVER值1</p><p>  MOV GAMEOVER,AL</p><p>  JMP NEXT</p><p>  NEXT: POP DI</p><p><b>  POP SI</b></p>

115、;<p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><

116、b>  RET</b></p><p>  CHECK_DIE ENDP</p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: CHECK_EAT</p>

117、<p>  ;功能: 處理吃到食物的響應</p><p>  ;傳遞參數(shù): SI,DI為當前蛇頭部的坐標</p><p>  ;函數(shù)返回: 蛇參數(shù)的值</p><p>  ;************************************************************************************

118、******</p><p>  CHECK_EAT PROC</p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p>&l

119、t;b>  PUSH DX</b></p><p><b>  PUSH SI</b></p><p>  PUSH DI </p><p>  MOV AX , FOODX</p><p>  MOV BX , FOODY</p><p>  CMP

120、 AX , SI</p><p>  JZ OK1</p><p>  JMP CHECK_EAT_OUT</p><p>  OK1: ;橫坐標相等</p><p>  CMP BX , DI</p><p>  JZ OK2</p><p>  JM

121、P CHECK_EAT_OUT</p><p>  OK2: ;縱坐標也相等</p><p>  MOV AL , POINT </p><p>  ADD AL , 1</p><p>  MOV POINT , AL ;加分</p><p>  MOV BX

122、, OFFSET BODY;增加蛇長</p><p>  XOR AX , AX</p><p>  MOV AL , LEN</p><p>  ADD BX , AX </p><p>  ADD BX , AX ;取到蛇尾</p><p>  SUB BX , 2

123、</p><p>  MOV AX , [BX]</p><p>  MOV DX , DIRECTION</p><p>  SUB AH , DH ;坐標減方向</p><p>  SUB AL , DL ;坐標減方向</p><p>  ADD BX

124、, 2 ;新格的存儲位置</p><p>  MOV [BX] , AX</p><p>  MOV AL , LEN ;LEN+1</p><p>  ADD AL , 1</p><p>  MOV LEN , AL</p><p>  CALL GETF

125、OOD ;得到新食物</p><p>  CHECK_EAT_OUT: </p><p><b>  POP DI</b></p><p><b>  POP SI</b></p><p><b>  POP DX</b></p>

126、<p><b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><b>  RET</b></p><p>  CHECK_EAT

127、 ENDP</p><p>  ;******************************************************************************************</p><p>  ;函數(shù)名: SHOW_POINT</p><p>  ;功能: 打印分數(shù)(進制轉換)</p><p>  

128、;傳遞參數(shù): </p><p><b>  ;函數(shù)返回: </b></p><p>  ;******************************************************************************************</p><p>  SHOW_POINT PROC</p&

129、gt;<p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p>&l

130、t;b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p>  MOV AL, POINT ;二進制數(shù)</p><p>  MOV AH, AL ;AH中放高4位</p><p>  MOV AL, PO

131、INT</p><p>  AND AL, 0FH ;AL中放低4位</p><p>  MOV BX, OFFSET SCORE;取得目標字符串地址</p><p>  ADD BX, 7;更改的末位在字串中的位置(后面保留2個0)</p><p>  B1: CMP AL,09H

132、 ;低4位大于9跳往B2</p><p><b>  JA B2</b></p><p>  ADD AL,30H ;低4位不大于9則加48</p><p>  MOV [BX],AL</p><p><b>  JMP B3</b></

133、p><p>  B2: MOV DL,AL</p><p>  ADD AL,26H ;大于9則加38</p><p>  MOV [BX],AL</p><p>  ADD AH,1</p><p>  B3: MOV AL,AH</p&g

134、t;<p>  XOR AH,AH</p><p>  DEC BX ;存儲地址-1</p><p>  CMP AX,0</p><p>  JNZ B1 ;不為0繼續(xù)轉換</p><p><b>  PUSH DX</b></p><p>&l

135、t;b>  PUSH BX</b></p><p>  MOV DX , 1810H</p><p>  CALL SETGB;設置光標</p><p>  MOV BL , YELLOW ;設置分數(shù)顏色</p><p>  LEA BP , SCORE ;顯示分數(shù)</p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論