汇编语言编写贪吃蛇游戏

合集下载

贪吃蛇游戏语言

贪吃蛇游戏语言

-
THANKS
感谢观看
XXX
贪吃蛇游戏c语言
答辩人:xxx
指导教师:xxx
-
引言
目录
游戏实现
1 引言
பைடு நூலகம்言
1
贪吃蛇游戏是一款经典的休闲 游戏,玩家需要控制一条蛇在 屏幕上移动,吃掉食物并避免
撞到墙壁或自己的身体
2
在C语言中实现贪吃蛇游 戏需要使用图形库来绘制 游戏界面和图像,以及处 理游戏逻辑和用户输入
2 游戏实现
游戏逻辑
游戏实现
游戏循环
贪吃蛇游戏的实现需要一个游戏循环,不 断更新游戏状态、渲染游戏界面和处理用 户输入。在C语言中,我们可以使用while 循环来创建游戏循环,不断检查用户的输 入并更新游戏状态,直到游戏结束
游戏实现
代码实现
以下是一个简单的贪吃蛇游戏的C语言代码实现示例
游戏实现
以下是上述代码的完整实现
游戏实现
用户输入处理
为了控制蛇的移动,我们需要从用户获取输入,并根 据输入来改变蛇的移动方向。通常,我们可以使用键 盘上的方向键来控制蛇的移动方向。在C语言中,我 们可以使用getch()函数来获取用户的按键输入
游戏实现
图形库
实现贪吃蛇游戏需要使用图形库来 绘制游戏界面和图像。在C语言中, 常用的图形库有SDL、OpenGL等。 这些图形库提供了绘制图像、处理 事件、渲染等功能,方便我们实现 贪吃蛇游戏
游戏实现
贪吃蛇游戏的核心逻辑包括以下几个部分 蛇的移动:根据用户的输入来控制蛇的移动方向, 每次移动蛇的身体会相应地增长 食物的生成:在游戏区域内随机生成食物的位置, 蛇吃到食物后身体长度增加 碰撞检测:检测蛇是否撞到墙壁或自己的身体,如 果撞到则游戏结束 分数计算:根据蛇吃到的食物数量来计算分数,并 在游戏结束时显示分数

简单的贪吃蛇游戏代码示例

简单的贪吃蛇游戏代码示例

《简单的贪吃蛇游戏代码示例,使用Python语言和pygame库实现:》import pygameimport random# 初始化pygamepygame.init()# 设置窗口大小和标题screen_width = 640screen_height = 480screen = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption("Snake Game")# 设置颜色white = (255, 255, 255)black = (0, 0, 0)red = (255, 0, 0)# 定义蛇的初始位置和长度snake_pos = [[100, 50], [90, 50], [80, 50]]snake_len = len(snake_pos)# 定义游戏结束标志和得分game_over = Falsescore = 0# 定义蛇的移动方向和速度direction = "right"speed = 10# 定义食物的初始位置和大小food_pos = [random.randint(1, screen_width-1), random.randint(1, screen_height-1)]food_size = 20# 定义边界和障碍物的大小和位置border = 10obstacle_size = 200obstacle_pos = [random.randint(border, screen_width-border), random.randint(border, screen_height-border)]obstacle_speed = 2# 游戏循环while not game_over:# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:game_over = Trueelif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP and direction != "down":direction = "up"elif event.key == pygame.K_DOWN and direction != "up":direction = "down"elif event.key == pygame.K_LEFT and direction != "right":direction = "left"elif event.key == pygame.K_RIGHT and direction != "left":direction = "right"elif event.type == pygame.KEYUP:if event.key == pygame.K_UP and direction == "up":direction = "right" if random.randint(0, 1) else "left"elif event.key == pygame.K_DOWN and direction == "down": direction = "right" if random.randint(0, 1) else "left"elif event.key == pygame.K_LEFT and direction == "left":direction = "up" if random.randint(0, 1) else "down"elif event.key == pygame.K_RIGHT and direction == "right": direction = "up" if random.randint(0, 1) else "down"。

用汇编语言实现贪吃蛇游戏

用汇编语言实现贪吃蛇游戏

;菜单
• sx db 200 dup(0)
;蛇的位置(sx,sy)
• sy db 200 dup(0)
• fx db 0
;食物的位置(fx,fy)
• fy db 0
• x db 20
;snack的头的当前位置(x,y)
• y db 20
• d db right
;方向
• dtemp db right
;当前的方向
mov sy[4],20
mov dx,4
;DX;为(4,4)->(163,163) 设置红色背景
mov ah,0ch
;功能0CH�在(4,4)写红色图形像素�
2�蛇的生命只有一条�我们设定的lord=1,即赋给蛇一条生命。其 实可以给它很多条生命�每死一次都将生命条数减一。
3�可以增加背景音乐�比如说在蛇运动的时候以及在蛇死亡的时 候配置不同的音乐�这样玩游戏会更有趣。 这些功能有待以后继续探讨�

• escape equ 01h
• db ' 1.Easier',0ah,0dh
• db ' 2.Easy',0ah,0dh
• db ' 3.Normal',0ah,0dh
• db ' 4.Hard',0ah,0dh

• db ' 5.Harder',0ah,0dh
• db 'Choose your level:','$'
• go:
• mov ax,data
• mov ds,ax
• mov ah,0
;调用00H功能�设置显示器模式�AL�显示器

贪吃蛇游戏代码(C语言编写)

贪吃蛇游戏代码(C语言编写)

贪吃蛇游戏代码(C语言编写)#include "graphics.h"#include "stdio.h"#define MAX 200#define MAXX 30#define MAXY 30#define UP 18432#define DOWN 20480#define LEFT 19200#define RIGHT 19712#define ESC 283#define ENTER 7181#define PAGEUP 18688#define PAGEDOWN 20736#define KEY_U 5749#define KEY_K 9579#define CTRL_P 6512#define TRUE 1#define FALSE 0#define GAMEINIT 1#define GAMESTART 2#define GAMEHAPPY 3#define GAMEOVER 4struct SPlace{int x;int y;int st;} place[MAX];int speed;int count;int score;int control;int head;int tear;int x,y;int babyx,babyy;int class;int eat;int game;int gamedelay[]={5000,4000,3000,2000,1000,500,250,100}; int gamedelay2[]={1000,1};static int hitme=TRUE,hit = TRUE; void init(void);void nextstatus(void);void draw(void);void init(void){int i;for(i=0;i<max;i++)< p="">{place[i].x = 0;place[i].y = 0;place[i].st = FALSE;}place[0].st = TRUE;place[1].st = TRUE;place[1].x = 1;speed = 9;count = 0;score = 0;control = 4;head = 1;tear = 0;x = 1;y = 0;babyx = rand()%MAXX;babyy = rand()%MAXY;eat = FALSE;game = GAMESTART;}void nextstatus(void){int i;int exit;int xx,yy;xx = x;yy = y;switch(control){case 1: y--; yy = y-1; break;case 2: y++; yy = y+1; break;case 3: x--; xx = x-1; break;case 4: x++; xx = x+1; break;}hit = TRUE;if ( ((control == 1) || (control ==2 )) && ( (y < 1) ||(y >= MAXY-1)) || (((control == 3) || (control == 4)) && ((x < 1) ||(x >= MAXX-1) ) ) ){}if ( (y < 0) ||(y >= MAXY) ||(x < 0) ||(x >= MAXX) ){game = GAMEOVER;control = 0;return;}for (i = 0; i < MAX; i++){if ((place[i].st) &&(x == place[i].x) &&(y == place[i].y) ){game = GAMEOVER;control = 0;return;}if ((place[i].st) &&(xx == place[i].x) &&(yy == place[i].y) ){hit = FALSE;goto OUT;}}OUT:if ( (x == babyx) && (y == babyy) ) {count ++;score += (1+class) * 10;}head ++;if (head >= MAX) head = 0;place[head].x = x;place[head].y = y;place[head].st= TRUE;if (eat == FALSE){place[tear].st = FALSE;tear ++;if (tear >= MAX) tear = 0;}else{eat = FALSE;exit = TRUE;while(exit){babyx = rand()%MAXX;babyy = rand()%MAXY;exit = FALSE;for( i = 0; i< MAX; i++ )if( (place[i].st)&&( place[i].x == babyx) && (place[i].y == babyy))exit ++;}}if (head == tear) game = GAMEHAPPY;}void draw(void){char temp[50];int i,j;for (i = 0; i < MAX; i++ ){setfillstyle(1,9);if (place[i].st)bar(place[i].x*15+1,place[i].y*10+1,place[i].x*15+14,place[i]. y*10+9);}setfillstyle(1,4);bar(babyx*15+1,babyy*10+1,babyx*15+14,babyy*10+9);setcolor(8);setfillstyle(1,8);bar(place[head].x*15+1,place[head].y*10+1,place[head].x*1 5+14,place[head].y*10+9); /* for( i = 0; i <= MAXX; i++ ) line( i*15,0, i*15, 10*MAXY);for( j = 0; j <= MAXY; j++ )line( 0, j*10, 15*MAXX, j*10); */rectangle(0,0,15*MAXX,10*MAXY);sprintf(temp,"Count: %d",count);settextstyle(1,0,2);setcolor(8);outtextxy(512,142,temp);setcolor(11);outtextxy(510,140,temp);sprintf(temp,"1P: %d",score);settextstyle(1,0,2);setcolor(8);outtextxy(512,102,temp); setcolor(12);outtextxy(510,100,temp); sprintf(temp,"Class: %d",class); setcolor(8);outtextxy(512,182,temp); setcolor(11);outtextxy(510,180,temp);}main(){int pause = 0;char temp[50];int d,m;int key;int p;static int keydown = FALSE; int exit = FALSE;int stchange = 0;d = VGA;m = VGAMED;initgraph( &d, &m, "" ); setbkcolor(3);class = 3;init();p = 1;while(!exit){if (kbhit()){key = bioskey(0);switch(key){case UP: if( (control != 2)&& !keydown)control = 1;keydown = TRUE;break;case DOWN: if( (control != 1)&& !keydown)control = 2;keydown = TRUE;break;case LEFT: if( (control != 4)&& !keydown)control = 3;keydown = TRUE;break;case RIGHT: if( (control != 3)&& !keydown)control = 4;keydown = TRUE;break;case ESC: exit = TRUE;break;case ENTER: init();break;case PAGEUP: class --; if (class<0) class = 0; break;case PAGEDOWN: class ++;if (class>7) class = 7; break;case KEY_U: if( ( (control ==1) ||(control ==2))&& !keydown) control = 3;else if(( (control == 3) || (control == 4))&& !keydown)control = 1;keydown = TRUE;break;case KEY_K: if( ( (control ==1) ||(control ==2))&& !keydown) control = 4;else if(( (control == 3) || (control == 4))&& !keydown)control = 2;keydown = TRUE;break;case CTRL_P:pause = 1 - pause; break;}}stchange ++ ;putpixel(0,0,0);if (stchange > gamedelay[class] + gamedelay2[hit]){stchange = 0;keydown = FALSE;p = 1 - p;setactivepage(p);cleardevice();if (!pause)nextstatus();else{settextstyle(1,0,4);setcolor(12);outtextxy(250,100,"PAUSE");}draw();if(game==GAMEOVER){settextstyle(0,0,6);setcolor(8);outtextxy(101,101,"GAME OVER"); setcolor(15);outtextxy(99,99,"GAME OVER"); setcolor(12);outtextxy(100,100,"GAME OVER"); sprintf(temp,"Last Count: %d",count); settextstyle(0,0,2);outtextxy(200,200,temp);}if(game==GAMEHAPPY){settextstyle(0,0,6);setcolor(12);outtextxy(100,300,"YOU WIN"); sprintf(temp,"Last Count: %d",count); settextstyle(0,0,2);outtextxy(200,200,temp);}setvisualpage(p);}}closegraph();}</max;i++)<>。

用汇编语言实现贪吃蛇游戏

用汇编语言实现贪吃蛇游戏

moc.yrellagemeht.www
。示展家大为里本事记在将们我�示 展中TPP在便不�长太序程子的们我于由
moc.yrellagemeht.www
!uoY knahT
O/G/O/L
moc.yrellagemeht.www
• • • • • • • • • • • • • •
c.yrellagemeht.www sdnemo a tad • 物食生产来用,数机随; 0 BD DEES • 04 BD 3N • 712 BD 2N • 92 BD 1N • 命 生 次 几 有; 1 b d dro l • 度长的kcans; 4 bd sl • 向 方 的 前 当; thgir bd pmetd • 向 方; thgir bd d • 02 bd y • )y,x(置位前当的头的kcans; 02 b d x • 0 bd y f • )yf,xf(置位的物食; 0 bd xf • )0(pud 002 bd ys • )ys,xs(置位的蛇; )0(pud 002 bd xs • 单菜 ; '$',':level ruoy esoohC' bd • hd0,ha0,'redraH.5 ' bd •
moc.yrellagemeht.www
色 黑置 设 景背 为;
h01 tni 0 , h b v om h01 tnI 0,lb vom 1 , hb v o m
)式模形图的色颜种4、002×023(板色调�LB�H10 �HB�板色调择选�色颜�LB�H00�HB�色颜 置设�框边或色景背、板色调置设�能功HB0用调; 4*002*023:幕屏置设次再; 码制进二为换转码IICSA;
• • • • • • •

贪吃蛇游戏代码

贪吃蛇游戏代码

贪吃蛇游戏代码贪吃蛇是一个经典的小游戏,可以在很多平台和设备上找到。

如果你想自己开发一个贪吃蛇游戏,这里有一个简单的Python版本,使用pygame库。

首先,确保你已经安装了pygame库。

如果没有,可以通过pip来安装:bash复制代码pip install pygame然后,你可以使用以下代码来创建一个简单的贪吃蛇游戏:python复制代码import pygameimport random# 初始化pygamepygame.init()# 颜色定义WHITE = (255, 255, 255)RED = (213, 50, 80)GREEN = (0, 255, 0)BLACK = (0, 0, 0)# 游戏屏幕大小WIDTH, HEIGHT = 640, 480screen = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption("贪吃蛇")# 时钟对象来控制帧速度clock = pygame.time.Clock()# 蛇的初始位置和大小snake = [(5, 5), (6, 5), (7, 5)]snake_dir = (1, 0)# 食物的初始位置food = (10, 10)food_spawn = True# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:snake_dir = (0, -1)elif event.key == pygame.K_DOWN:snake_dir = (0, 1)elif event.key == pygame.K_LEFT:snake_dir = (-1, 0)elif event.key == pygame.K_RIGHT:snake_dir = (1, 0)# 检查蛇是否吃到了食物if snake[0] == food:food_spawn = Falseelse:del snake[-1]if food_spawn is False:food = (random.randint(1, (WIDTH // 20)) * 20, random.randint(1, (HEIGHT // 20)) * 20)food_spawn = Truenew_head = ((snake[0][0] + snake_dir[0]) % (WIDTH // 20), (snake[0][1] + snake_dir[1]) % (HEIGHT // 20))snake.insert(0, new_head)# 检查游戏结束条件if snake[0] in snake[1:]:running = False# 清屏screen.fill(BLACK)# 绘制蛇for segment in snake:pygame.draw.rect(screen, GREEN, (segment[0], segment[1], 20, 20))# 绘制食物pygame.draw.rect(screen, RED, (food[0], food[1], 20, 20))# 更新屏幕显示pygame.display.flip()# 控制帧速度clock.tick(10)pygame.quit()这个代码实现了一个基本的贪吃蛇游戏。

贪吃蛇游戏代码

贪吃蛇游戏代码

贪吃蛇游戏可以使用Python的pygame库来实现。

以下是一份完整的贪吃蛇游戏代码:```pythonimport pygameimport sysimport random#初始化pygamepygame.init()#设置屏幕尺寸和标题screen_size=(800,600)screen=pygame.display.set_mode(screen_size)pygame.display.set_caption('贪吃蛇')#设置颜色white=(255,255,255)black=(0,0,0)#设置蛇和食物的大小snake_size=20food_size=20#设置速度clock=pygame.time.Clock()speed=10snake_pos=[[100,100],[120,100],[140,100]]snake_speed=[snake_size,0]food_pos=[random.randrange(1,(screen_size[0]//food_size))*food_size,random.randrange(1,(screen_size[1]//food_size))*food_size]food_spawn=True#游戏主循环while True:for event in pygame.event.get():if event.type==pygame.QUIT:pygame.quit()sys.exit()keys=pygame.key.get_pressed()for key in keys:if keys[pygame.K_UP]and snake_speed[1]!=snake_size:snake_speed=[0,-snake_size]if keys[pygame.K_DOWN]and snake_speed[1]!=-snake_size:snake_speed=[0,snake_size]if keys[pygame.K_LEFT]and snake_speed[0]!=snake_size:snake_speed=[-snake_size,0]if keys[pygame.K_RIGHT]and snake_speed[0]!=-snake_size:snake_speed=[snake_size,0]snake_pos[0][0]+=snake_speed[0]snake_pos[0][1]+=snake_speed[1]#碰撞检测if snake_pos[0][0]<0or snake_pos[0][0]>=screen_size[0]or\snake_pos[0][1]<0or snake_pos[0][1]>=screen_size[1]or\snake_pos[0]in snake_pos[1:]:pygame.quit()sys.exit()#蛇吃食物if snake_pos[0]==food_pos:food_spawn=Falseelse:snake_pos.pop()if not food_spawn:food_pos=[random.randrange(1,(screen_size[0]//food_size))*food_size,random.randrange(1,(screen_size[1]//food_size))*food_size] food_spawn=True#绘制screen.fill(black)for pos in snake_pos:pygame.draw.rect(screen,white,pygame.Rect(pos[0],pos[1],snake_size,snake_size)) pygame.draw.rect(screen,white,pygame.Rect(food_pos[0],food_pos[1],food_size, food_size))pygame.display.flip()clock.tick(speed)```这个代码实现了一个简单的贪吃蛇游戏,包括基本的游戏循环、蛇的移动、食物的生成和碰撞检测。

《贪吃蛇》游戏程序代码

《贪吃蛇》游戏程序代码

《贪吃蛇》游戏程序代码1. 游戏初始化:设置游戏窗口、蛇的初始位置和长度、食物的初始位置等。

2. 蛇的移动:根据用户输入的方向键,更新蛇的位置。

确保蛇的移动不会超出游戏窗口的边界。

3. 食物的:在游戏窗口中随机食物的位置。

确保食物不会出现在蛇的身体上。

4. 碰撞检测:检测蛇头是否撞到食物或自己的身体。

如果撞到食物,蛇的长度增加;如果撞到自己的身体,游戏结束。

5. 游戏循环:不断更新游戏画面,直到游戏结束。

6. 游戏结束:显示游戏结束的提示,并询问用户是否重新开始游戏。

import random游戏窗口大小WIDTH, HEIGHT = 800, 600蛇的初始位置和长度snake = [(WIDTH // 2, HEIGHT // 2)]snake_length = 1食物的初始位置food = (random.randint(0, WIDTH // 10) 10,random.randint(0, HEIGHT // 10) 10)蛇的移动方向direction = 'RIGHT'游戏循环while True:更新蛇的位置if direction == 'UP':snake.insert(0, (snake[0][0], snake[0][1] 10)) elif direction == 'DOWN':snake.insert(0, (snake[0][0], snake[0][1] + 10)) elif direction == 'LEFT':snake.insert(0, (snake[0][0] 10, snake[0][1])) elif direction == 'RIGHT':snake.insert(0, (snake[0][0] + 10, snake[0][1]))检测碰撞if snake[0] == food:food = (random.randint(0, WIDTH // 10) 10, random.randint(0, HEIGHT // 10) 10)else:snake.pop()检测游戏结束条件if snake[0] in snake[1:] or snake[0][0] < 0 or snake[0][0] >= WIDTH or snake[0][1] < 0 or snake[0][1] >= HEIGHT:break游戏画面更新(这里使用print代替实际的游戏画面更新) print(snake)用户输入方向键direction = input("请输入方向键(WASD): ").upper() print("游戏结束!")。

编写手机游戏贪吃蛇

编写手机游戏贪吃蛇
<MTSE1.0>
<MTSE1.0>
六、蛇身吃到“蛇”点增长
当蛇身吃到“蛇”时,吃到的蛇自动增加到蛇的末端,蛇身长度增加1(颜 当蛇身吃到“ 吃到的蛇自动增加到蛇的末端,蛇身长度增加 ( 色不变)。 色不变)。 部分参考代码: 部分参考代码: SnakeNode head = (SnakeNode) snake.elementAt(0);//蛇头 蛇头 SnakeNode tail = (SnakeNode) snake.elementAt(snake.size() - 1);//蛇尾 蛇尾 for (int i = 0; i < diamonds.size(); i++) { SnakeNode n = (SnakeNode) diamonds.elementAt(i); if (head.posX == n.posX && head.posY == n.posY) { SnakeNode add = new SnakeNode(); add.color = n.color; switch (tail.direct) { case SnakeNode.UP: add.posX = tail.posX; add.posY = tail.posY + 10; break; ……
<MTSE1.0>
八、添加得分信息
可以简单设定,每吃到一个“蛇”点加上5分和 可以简单设定,每吃到一个“ 点加上 分和 点的颜色积分。 “蛇”点的颜色积分。 参考代码: 参考代码: score += addScore + colorCount;
<MTSE1.0>
九、判断游戏结束
只有一种游戏结束的方式,即蛇头碰到蛇身游戏结束。 只有一种游戏结束的方式,即蛇头碰到蛇身游戏结束。 参考代码: 参考代码: public void isOver() { SnakeNode head = (SnakeNode) snake.elementAt(0); for (int i = 1; i < snake.size(); i++) { SnakeNode n = (SnakeNode) snake.elementAt(i); if (head.posX == n.posX && head.posY == n.posY) { gameState = OVER; } } }

软件编程实训结业作业贪吃蛇游戏draft

软件编程实训结业作业贪吃蛇游戏draft

贪吃蛇游戏1.1 程序功能贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动。

蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物.等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。

1.2 程序设计目的本程序实现的主要技巧在二维数组的应用上。

目的是通过游戏程序增加编程的兴趣,提高编程水平。

1.3 程序设计1.3.1游戏界面程序运行时的游戏界面如图1—1所示。

边框表示围墙,红色矩形块代表蛇,绿色小方块代表食物。

如图1—1程序运行时的游戏界面1.3.2 设计思路这个程序的关链点是表示蛇的图形以及蛇的移动。

用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。

移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。

如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,出于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现和消失也是画矩形块和覆盖矩形块。

为了便于理解,定义了两个结构体:食物和蛇。

1.数据结构表示食物和蛇的矩形块都设计为10×10个像素单位,食物的基本数据域为它所出现的位置,用x和y坐标表示,则矩形块用函数rectangIe(x,y,x+10,y+10)或比rectangle(x,y,x+10,y-10)可以画出。

【函数名: rectangle功能: 画一个矩形用法: void far rectangle(int left, int top, int right, int bottom);参数说明:(left ,top )为矩形的左上坐标,(right,bottom)为矩形的右下坐标,两者可确定一个矩形的大小】由于每次只出现一个食物,而食物被吃掉后,才出现下一个食物,所以设定yes表示是否要出现食物的变量。

贪吃蛇小游戏编程实现

贪吃蛇小游戏编程实现

贪吃蛇小游戏编程实现贪吃蛇(Snake)游戏是一种经典的益智游戏,原理是控制一个蛇在有限的游戏区域中移动并吃食物,蛇的身体随着吃的食物长度增加,游戏目标是使蛇吃到尽可能多的食物并避免撞到边界或自身身体。

本文将介绍如何使用编程语言实现一个贪吃蛇小游戏。

一、游戏环境设置为了实现贪吃蛇小游戏,我们首先需要创建一个游戏环境。

游戏环境可以是一个矩形区域,根据游戏需求,可以自定义其大小。

在游戏环境中,我们需要绘制蛇、食物以及游戏得分等元素。

二、蛇的移动控制实现贪吃蛇游戏的关键是控制蛇的移动。

蛇的移动通常由用户输入的方向控制,例如使用键盘的上、下、左、右键控制蛇的移动方向。

在每一次蛇的移动中,我们需要更新蛇的位置并判断是否吃到了食物或者撞到了边界或自身身体。

三、食物的生成与吃掉在游戏中,随机生成食物是必要的。

当蛇吃到食物时,蛇的长度会增加,并且在游戏区域中生成一个新的食物。

为了触发吃食物的事件,我们需要判断蛇的头部是否与食物的位置重合,如果重合则表示蛇吃到了食物。

四、游戏结束条件判断游戏在满足某些条件下结束,例如蛇撞到了边界或自身的身体。

当蛇的头部位置超过了游戏区域或者与自己的身体发生碰撞时,游戏结束,玩家可以选择重新开始游戏或者退出游戏。

五、计分系统为了增加游戏的挑战性,我们可以加入计分系统。

在每次吃到食物时,玩家得分增加,并在游戏界面显示得分。

可以根据得分的高低设置等级,并随着游戏的进行提高速度或其他难度。

六、游戏界面设计为了提升游戏的体验,我们可以对游戏界面进行设计美化。

可以使用不同颜色和图案来绘制游戏元素,使游戏界面更加美观。

同时,我们还可以为游戏界面添加音效或背景音乐,增加游戏的趣味性。

七、总结通过编程实现贪吃蛇小游戏,我们可以提升自己的编程能力,并享受自己设计的游戏带来的乐趣。

贪吃蛇小游戏不仅简单有趣,而且可以帮助我们锻炼思维敏捷性和逻辑思维能力。

希望本文对你有所帮助,让你更好地实现贪吃蛇小游戏的编程实现。

汇编贪吃蛇课程设计

汇编贪吃蛇课程设计

汇编贪吃蛇课程设计一、课程目标知识目标:1. 让学生掌握汇编语言的基本语法和使用方法;2. 让学生理解贪吃蛇游戏的逻辑和实现原理;3. 让学生掌握使用汇编语言编写和调试简单程序的能力。

技能目标:1. 培养学生运用汇编语言解决问题的能力;2. 培养学生进行程序设计和调试的技巧;3. 提高学生的逻辑思维和分析问题的能力。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣和热情;2. 培养学生面对困难的勇气和毅力,增强自信心;3. 引导学生树立团队协作意识,培养合作精神。

课程性质:本课程为信息技术学科,以实践操作为主,结合理论知识,旨在培养学生的编程兴趣和实际动手能力。

学生特点:本课程面向初中年级学生,他们对计算机有一定的基础认识,对新知识充满好奇心,但编程经验有限。

教学要求:结合学生特点,课程设计应注重实践与理论的结合,循序渐进地引导学生掌握汇编语言编程,注重培养学生的实际操作能力和解决问题的能力。

通过贪吃蛇游戏的编写,让学生体验编程的乐趣,提高学生的信息素养。

在教学过程中,关注学生的情感态度,激发学习兴趣,培养良好的学习习惯和团队协作精神。

最终将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 汇编语言基础知识:- 数据表示与存储:二进制、十六进制、寄存器、内存;- 指令系统:运算指令、逻辑指令、控制指令;- 程序结构:段定义、过程定义、宏定义。

2. 贪吃蛇游戏逻辑与实现:- 游戏规则与设计思路;- 蛇的移动、转向、增长;- 食物的随机生成;- 碰撞检测与游戏结束条件。

3. 汇编语言编写与调试:- 编写简单的汇编程序;- 调试技巧与错误处理;- 贪吃蛇游戏的汇编语言实现。

4. 教学内容的安排和进度:- 第一课时:汇编语言基础知识学习;- 第二课时:贪吃蛇游戏逻辑分析;- 第三课时:编写简单的汇编程序;- 第四课时:贪吃蛇游戏的汇编语言实现与调试。

教学内容参照课本相关章节,结合课程目标进行选择和组织,确保科学性和系统性。

X86汇编贪吃蛇游戏(nasm)

X86汇编贪吃蛇游戏(nasm)

X86汇编语言程序设计实验报告学 院:信息科学与技术学院班 级:计科一班学 号:13349061姓 名:廖远强指导老师:凌应标2015.6.16贪吃变色龙游戏设计一、 实验目的用汇编语言编程。

二、 实验内容完成一个汇编语言设计的互动单人游戏程序设计项目。

三、实验要求(1)文本方式的显示控制(2)有1个以上的多个移动物体(字符),在屏幕区域内反复移动(3)有数字显示游戏中的内部信息(4)加分项:个性特征丰富,如移动、物体形态或数量变化的不规则性、多种性;键盘交互与控制能力;布局外观吸引眼球能力;适合原型操作系统中运行;同等完成质量提交越早越好。

四、开发环境平台工具:dos box 、Notepad++、Nasm、winHex、vmware workstaction 五、游戏设计步骤我在设计这个贪吃变色龙游戏时,有几个比较重要的步骤:1.龙身的存储;2.龙身的显示;3.龙身的移动;4.龙身移动方向的改变;5.食物的产生和放置;6.吃到食物并生长;7.龙的死亡;8.游戏改进,游戏界面的设计;下面将进行这几个步骤的细致叙述:一、 龙身的存储一开始是想着,屏幕是二维屏幕,如果可以获得龙身的坐标的话,直接在当前坐标打印蛇身就好了。

可是龙身不是只有一个点,而是有许多点,那么该如何存储龙身所有的坐标呢,如果可以像高级语言那个使用数组来存储就好了。

那怎么办呢,我想起了这个语句:times 510-($-$$) db 0,好吧,这个就是用来声明数组的,可以在前面加一个label,这个label就是这个数组的首地址,获得数组的首地址之后就可以访问整个数组了。

声明数组的时候要有两个,即龙身的横纵坐标,用这种方法来存储龙身,那么后面的程序写起来就会顺利很多了。

其中龙身的头尾坐标要另外存储,后面判断吃食物的,还有撞到自己的会用到。

二、龙身的显示龙身用数组来存储之后,想要显示龙身就简单了,只要访问龙身,获得龙身的坐标,然后调用BIOS中断,一个一个打印龙身就可以把我的龙显示出来了。

汇编语言编写贪吃蛇游戏

汇编语言编写贪吃蛇游戏

DA TA SEGMENTdw 0,0snk db 1blk db 32food db 3tal1 db 4tal2 db 2adrs db 5len db ?pst db ?addrs dw ?frow db ?fcol db ?hwrt db ?gmov db 'game over press r to restart press q to quit $'score1 db 'score :$'score2 db ?score0 db 1zero db 48writer db 'Developer: Geniusdot $'email db 'e-mail: pang@$'msg1 db 'The way to play the game:$'way db ' press w to up ,press s to down,press a to left,press d to right$' msg db 'Press any key(except a,s,d,w) to start$'DA TA ENDSSTACK SEGMENT stackdb 200 dup(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKstart:mov ax,datamov ds,axmov ax,0mov es,axmov frow,10mov fcol,6mov dh,10mov dl,26mov ah,2int 10hmov ah,9 lea dx,msg1 int 21hmov dh,11 mov dl,7 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,way int 21hmov dh,12 mov dl,20 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,msg int 21hmov ah,0int 16hmov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10hmov dh,0 mov dl,0 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,score1 int 21hmov dl,15 mov ah,2 mov bh,0int 10hlea dx,writerint 21hmov ah,9lea dx,emailint 21hmov score2,48push es:[9*4] ;将原int9入口地址保存pop ds:[0]push es:[9*4+2]pop ds:[2]mov word ptr es:[9*4],offset int9 ;更改中断向量表mov es:[9*4+2],csjmp aawrite macro row,col,cnt ;宏定义用于向当前光标处输出字符push bxpush cxpush dxmov dh,rowmov dl,colmov ah,2mov bh,0int 10hmov ah,9mov bl,11mov cx,1lea di,cnt ;50mov al,[di]int 10hpop dxpop cxpop bxendmreadh macro row,col ;宏定义用于读出当前光标处字符push dxpush bxmov dh,rowmov dl,colmov ah,2mov bh,0int 10hmov ah,08hint 10hmov pst,alpop bxpop axpop dxendmwnear macro ;宏定义只用在readcg宏中当readcg的所有判断都不成立调用此宏local wnext1local wnext2local wnext3local wnext4push dxdec dhreadh dh,dlcmp pst,1jne wnext1write dh,dl,tal2jmp wnext4wnext1:inc dhdec dlreadh dh,dlcmp pst,1jne wnext2write dh,dl,tal2jmp wnext4wnext2:inc dhinc dlreadh dh,dlcmp pst,1jne wnext3write dh,dl,tal2jmp wnext4dec dhinc dlreadh dh,dlcmp pst,1jne wnext4write dh,dl,tal2wnext4:pop dxendmreadcg macro row,col ;宏定义用于改变判断出来的字符local tnup,tnup1,tnup2,tnlf,tnlf1,tnlf2,tndn,tndn1,tndn2,tnrt,tnrt1,tnrt2,gooutpush bxpush axpush dxwrite dh,dl,tal1dec rowreadh dh,dlcmp pst,4jne tnup1jmp tnup2tnup1:jmp near ptr tnuptnup2:write dh,dl,blkinc dhinc dhreadh dh,dlcmp pst,1jne tnupwrite dh,dl,tal2jmp near ptr goouttnup:pop dxpush dxdec colreadh dh,dlcmp pst,4jne tnlf1jmp tnlf2tnlf1:jmp near ptr tnlf tnlf2:write dh,dl,blk inc dlinc dlreadh dh,dlcmp pst,1jne tnlfwrite dh,dl,tal2 jmp near ptr goout tnlf:pop dxpush dxinc rowreadh dh,dlcmp pst,4jne tndn1jmp tndn2tndn1:jmp near ptr tndn tndn2:write dh,dl,blk dec dhdec dhreadh dh,dlcmp pst,1jne tndnwrite dh,dl,tal2 jmp near ptr goout tndn:pop dxpush dxinc colreadh dh,dlcmp pst,4jne tnrt1jmp tnrt2tnrt1:jmp near ptr tnrt tnrt2:write dh,dl,blk dec dldec dlreadh dh,dlcmp pst,1jne tnrtwrite dh,dl,tal2jmp near ptr goouttnrt:pop dxpush dxwneargoout:pop dxpop axpop bxendmaddone: ;此标号功能是将蛇身增加一push dxinc score2mov dh,1mov dl,0mov cx,23cmpad1:push cxmov cx,79cmpad2:readh dh,dlcmp pst,2jne nextad3jmp nextad4nextad3:jmp near ptr nextadnextad4:write dh,dl,snkdec dhreadh dh,dlcmp pst,4jne natupwrite dh,dl,tal2dec dhwrite dh,dl,tal1jmp outonatup:inc dhreadh dh,dlcmp pst,4jne natlfwrite dh,dl,tal2dec dlwrite dh,dl,tal1jmp outonatlf:inc dhinc dlreadh dh,dlcmp pst,4jne natdnwrite dh,dl,tal2inc dhwrite dh,dl,tal1jmp outonatdn:dec dhinc dlreadh dh,dlcmp pst,4jne natrtwrite dh,dl,tal2inc dlwrite dh,dl,tal1 natrt:outo:pop cxjmp near ptr endad nextad:inc dljmp nextad2 chgad2:jmp near ptr cmpad2 nextad2:loop chgad2sub dl,79inc dhpop cxjmp nextad1 chgad1:jmp near ptr cmpad1loop chgad1endad:pop dxjmp near ptr crtfaa: ;从这开始产生最原始的蛇mov addrs,offset turnrightmov dh,10mov dl,1mov cx,3write dh,dl,tal1inc dlwrite dh,dl,tal2wrt:inc dlwrite dh,dl,snkloop wrtmov len,6mov ax,0jmp wrt1ovflw: ;当蛇碰壁或自身转到此游戏结束mov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hmov dh,17mov dl,17mov ah,2mov bh,0int 10hmov ah,9lea dx,gmovint 21hmov ax,0 ;恢复int9中断mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]stop:mov ah,0int 16hcmp al,'r'je aa1jmp aa2aa1:jmp near ptr startaa2:cmp al,'q'jne stopjmp near ptr exitwrt1: ;此处蛇行走过程的无限循环call dlypush dxinc dhcmp dh,25je ovflwinc dlcmp dl,80je ovflwpop dxpush dxdec dhcmp dh,0je ovflwdec dlcmp dl,-1je ovflwpop dxpush dxlea ax,turnrightcmp addrs,axjne tonxt2inc dlreadh dh,dlcmp pst,1je tonxt1cmp pst,2je tonxt1cmp pst,4je tonxt1jmp tonxt2 tonxt1:jmp ovflw tonxt2:pop dxpush dxlea ax,turnup cmp addrs,ax jne tonxt4dec dhreadh dh,dl cmp pst,1je tonxt3cmp pst,2je tonxt3cmp pst,4je tonxt3jmp tonxt4 tonxt3:jmp ovflw tonxt4:pop dxpush dxlea ax,turndown cmp addrs,ax jne tonxt6inc dhreadh dh,dl cmp pst,1je tonxt5cmp pst,2je tonxt5cmp pst,4je tonxt5jmp tonxt6 tonxt5:jmp ovflw tonxt6:pop dxpush dxlea ax,turnbackcmp addrs,axjne tonxt8dec dlreadh dh,dlcmp pst,1je tonxt7cmp pst,2je tonxt7cmp pst,4je tonxt7jmp tonxt8tonxt7:jmp ovflwtonxt8:pop dxjmp nextacrtf1:jmp near ptr addone crtf:call rand1call rand2inc frowmov ah,frowmov al,fcolpush dxmov dh,1mov dl,0push cxmov cx,23check1:push cxmov cx,79check2:readh dh,dlcmp pst,1je nextncmp pst,2je nextncmp pst,4je nextnjmp nextnn nextn:cmp ax,dxje crtfinc dlloop check2inc dhsub dl,79pop cxloop check1pop cxpop dxwrite frow,fcol,food nexta:mov ah,frowmov al,fcolcmp ax,dxje crtf12jmp crtf13crtf12:jmp near ptr crtf1 crtf13:push dxcmp score2,58jl normalmov score2,49inc score0 normal:mov dh,0mov dl,8write dh,dl,score2 add dl,score0write dh,dl,zero pop dxcmp adrs,17je jmp1cmp adrs,145je jmp1cmp adrs,31je jmp2cmp adrs,159je jmp2cmp adrs,32je jmp3cmp adrs,160je jmp3cmp adrs,30cmp adrs,158je jmp4jmp addrsjmp1:lea ax, turndowncmp ax,addrsje jmp2mov addrs,offset turnupjmp near ptr turnupjmp2:lea ax,turnupcmp ax,addrsje jmp1mov addrs,offset turndownjmp near ptr turndownjmp3:lea ax,turnbackcmp ax,addrsje jmp4mov addrs,offset turnrightjmp near ptr turnrightjmp4:lea ax,turnrightcmp ax,addrsje jmp3mov addrs,offset turnbackjmp near ptr turnbackturnright: ;此处实现蛇向左走push dxmov dh,1mov dl,0mov cx,23cmpr1:push cxmov cx,79cmpr2:readh dh,dlcmp pst,2je nextr4jmp near ptr nextrreadcg dh,dlpop cxjmp near ptr endrnextr:inc dljmp nextr2chgr2:jmp near ptr cmpr2nextr2:loop chgr2sub dl,79inc dhpop cxjmp nextr1chgr1:jmp near ptr cmpr1nextr1:loop chgr1endr:pop dxinc dlwrite dh,dl,snkjmp near ptr wrt1turnup: ;此处实现蛇向上走push dxmov dh,1mov dl,0mov cx,23cmpu1:push cxmov cx,79cmpu2:readh dh,dlcmp pst,2jne nextu3jmp nextu4nextu3:jmp near ptr nextunextu4:readcg dh,dljmp near ptr endunextu:inc dljmp nextu2chgu2:jmp near ptr cmpu2nextu2:loop chgu2sub dl,79inc dhpop cxjmp nextu1chgu1:jmp near ptr cmpu1nextu1:loop chgu1endu:pop dxdec dhwrite dh,dl,snkjmp near ptr wrt1turndown: ;此处实现蛇向下走push dxmov dh,1mov dl,0mov cx,23cmpd1:push cxmov cx,79cmpd2:readh dh,dlcmp pst,2jne nextd3jmp nextd4nextd3:jmp near ptr nextdnextd4:readcg dh,dlpop cxjmp near ptr enddinc dljmp nextd2chgd2:jmp near ptr cmpd2nextd2:loop chgd2sub dl,79inc dhpop cxjmp nextd1chgd1:jmp near ptr cmpd1nextd1:loop chgd1endd:pop dxinc dhwrite dh,dl,snkjmp near ptr wrt1turnback: ;此处实现蛇向右走push dxmov dh,1mov dl,0mov cx,23cmpb1:push cxmov cx,79cmpb2:readh dh,dlcmp pst,2jne nextb3jmp nextb4nextb3:jmp near ptr nextbnextb4:readcg dh,dlpop cxjmp near ptr endbnextb:inc dljmp nextb2chgb2:jmp near ptr cmpb2nextb2:loop chgb2sub dl,79inc dhpop cxjmp nextb1chgb1:jmp near ptr cmpb1nextb1:loop chgb1endb:pop dxdec dlwrite dh,dl,snkjmp near ptr wrt1exit:mov ax,0 ;恢复int9中断mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]mov ah,4chint 21hint9: ;更改后的中断服务程序push axin al,60hmov adrs,almov al,20hout 20h,alpop axiretDL Y PROC near ;延时子程序PUSH CXPUSH DXMOV DX,10000DL1: MOV CX,9801DL2: LOOP DL2DEC DXJNZ DL1POP DXPOP CXRETDL Y ENDPRAND1 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,23 ;除23,产生0~23余数DIV DLMOV frow,AH ;余数存frow,作随机行数POP AXPOP DXPOP CXRETRAND1 ENDPRAND2 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,79 ;除79,产生0~79余数DIV DLMOV fcol,AH ;余数存fcol,作随机列数POP AXPOP DXPOP CXRET RAND2 ENDP CODE ENDSEND start。

使用汇编语言编写一条简单的贪吃蛇的实现

使用汇编语言编写一条简单的贪吃蛇的实现

使⽤汇编语⾔编写⼀条简单的贪吃蛇的实现本⽂中的汇编语⾔是基于x86芯⽚,下⾯给出代码:;TITLE GAME4THPAGE 60,132STSEG SEGMENTDB 64 DUP (0)STSEG ENDS;-----------------------------------DTSEG SEGMENTDATAH DB 10H,10H,10H,10H,10H,10H,10H,10H,10HDATAL DB 20H,21H,22H,23H,24H,25H,26H,27H,28HDTSEG ENDSCR EQU 0DHLF EQU 0AH;------------------------------------CDSEG SEGMENTMAIN PROC FARASSUME CS:CDSEG,DS:DTSEG,SS:STSEGMOV AX,DTSEGMOV DS,AXMOV AX,0600HMOV BH,00011110BMOV CX,0MOV DH,18HMOV DL,04FHINT 10HFISH: MOV AX,0600HMOV BH,00011110BMOV CX,0MOV DH,18HMOV DL,04FHINT 10HMOV AH,02MOV BH,00MOV SI,OFFSET DATAHMOV DI,OFFSET DATALMOV DH,[SI]MOV DL,[DI]INT 10HMOV AX,0201HMOV DL,'+'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+1MOV DL,[DI]+1INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+2MOV DL,[DI]+2INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+3MOV DL,[DI]+3INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+4MOV DL,[DI]+4INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+5MOV DL,[DI]+5INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+6MOV DL,[DI]+6INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+7MOV DL,[DI]+7INT 10HMOV AX,0201HMOV DL,'#'INT 21HMOV AH,02MOV BH,00MOV DH,[SI]+8MOV DL,[DI]+8INT 10HMOV AX,0201HMOV DL,'>'INT 21HLOOP1:MOV AH,0 ;循环输⼊MOV AL,0INT 16HCMP AH,72JE UPCMP AH,80JE DOWNCMP AH,77JE RIGHTCMP AH,75JE LEFTUP: MOV SI,OFFSET DATAH MOV DI,OFFSET DATALMOV DH,[SI]+8MOV DL,[DI]+8MOV CH,DHMOV CL,DLDEC DHMOV [SI]+8,DHMOV [DI]+8,DLJMP BACKDOWN: MOV SI,OFFSET DATAH MOV DI,OFFSET DATALMOV DH,[SI]+8MOV DL,[DI]+8MOV CH,DHMOV CL,DLINC DHMOV [SI]+8,DHMOV [DI]+8,DLJMP BACKLEFT: MOV SI,OFFSET DATAH MOV DI,OFFSET DATALMOV DH,[SI]+8MOV DL,[DI]+8MOV CH,DHMOV CL,DLDEC DLMOV [SI]+8,DHMOV [DI]+8,DLJMP BACKRIGHT:MOV SI,OFFSET DATAHMOV DI,OFFSET DATALMOV DH,[SI]+8MOV DL,[DI]+8MOV CH,DHMOV CL,DLINC DLMOV [SI]+8,DHMOV [DI]+8,DLJMP BACKBACK: MOV DH,[SI]+7MOV DL,[DI]+7MOV [SI]+7,CHMOV [DI]+7,CLMOV CH,DHMOV CL,DLMOV DH,[SI]+6MOV DL,[DI]+6MOV [SI]+6,CHMOV [DI]+6,CLMOV CH,DHMOV CL,DLMOV DH,[SI]+5MOV DL,[DI]+5MOV [SI]+5,CHMOV [DI]+5,CLMOV CH,DHMOV CL,DLMOV DH,[SI]+4MOV DL,[DI]+4MOV [SI]+4,CHMOV [DI]+4,CLMOV CH,DHMOV CL,DLMOV DH,[SI]+3MOV DL,[DI]+3MOV [SI]+3,CHMOV [DI]+3,CLMOV CH,DHMOV CL,DLMOV DH,[SI]+2MOV DL,[DI]+2MOV [SI]+2,CHMOV [DI]+2,CLMOV CH,DHMOV CL,DLMOV DH,[SI]+1MOV DL,[DI]+1MOV [SI]+1,CHMOV [DI]+1,CLMOV CH,DHMOV CL,DLMOV DH,[SI]MOV DL,[DI]MOV [SI],CHMOV [DI],CLMOV CH,DHMOV CL,DLJMP FISHMAIN ENDPCDSEG ENDSEND MAIN以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

汇编贪吃蛇实验报告

汇编贪吃蛇实验报告

汇编语言与接口课程实验报告实验编号__________实验六______________实验名称__________贪吃蛇程序__________实验室名称________软件机房____________班级______________软件93______________学号______________*******___________姓名_______________*******_____________实验日期___2011__年___06__月___15___日评分教师实验报告成绩__________ 评分日期________年_______月________日软件学院汇编与接口综合实验选题表一、实验目的:熟练掌握汇编的各种指令,综合运用汇编的各种指令编写一个贪吃蛇程序。

在贪吃蛇程序的编写过程中深刻理解汇编语言,深刻理解汇编语言与其他语言的不同。

二、实验环境Masm for Windows集成环境2011。

三、实验内容1、回顾书中关于汇编语言的基础知识,利用彩色图形程序设计、发声系统的程序设计的知识,实现贪吃蛇的可视化及声音。

2、实验思路:贪吃蛇程序,利用不同的颜色形状的字符分别表示贪吃蛇蛇身,食物,以及障碍物。

在dos界面下,有25行80列,第0行设置游戏进行的分数及关卡信息,在1~24行为蛇的活动范围。

游戏设置4关,过三关游戏及通关成功。

否则挑战失败,可以重新挑战或者退出。

因为此贪吃蛇程序是利用字符完成的,所以始终要对指定的行和指定的列进行读、写字符操作。

所以在程序开始以前编写read和write宏命令是非常必要的。

贪吃蛇移动的过程中,方向是随时可能改变的,所以这里就利用的中断。

把9号中断向量给重新定义为:把键盘读紧的字符都存放在adrs中,再判断adrs是不是指定的上下左右键。

蛇的移动过程始终伴随有各种的判断过程,首先判断是否进入下一个关卡,如果是则进入下一关,如果不是则继续判断蛇是否撞到自身、墙壁、障碍物。

汇编贪吃蛇课程设计附源码

汇编贪吃蛇课程设计附源码

目录1程序简介 (1)2程序设计 (1)2.1程序分析程序初始化: (1)2.2游戏流程 (2)2.3程序流程图 (3)2.4数据定义及重要函数 (4)3系统测试及改进 (12)3.1程序测试 (12)3.2系统改进 (14)4源码 (15)1程序简介贪吃蛇游戏是一个经典小游戏,在封闭的围墙里面,通过键盘的上下左右控制蛇的方向,寻找随机出现的食物。

蛇头撞到食物,则食物被吃掉,蛇身体长度+1,同时记100分,蛇的身子越吃越长,身子越长玩的难度就越大,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

2程序设计2.1程序分析程序初始化:加载在数据段定义好相关的提示信息以及储存蛇身的数组,主要是如何开始游戏的提示信息蛇的移动:程序的关键是表示蛇的图形以及蛇的移动。

一开始用4个小矩形表示蛇的身体,每吃一个食物,身体增加一个矩形,移动时必须从蛇头开始,所以蛇不能向相反方向移动,蛇头的前进方向也就是蛇的方向,蛇尾不能改作蛇头。

设置一个等待时间,如果不按任何按键,蛇在当前方向上前进。

按了有效的方向键后,先确定蛇头的位置然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有清屏的原因,原来蛇的位置和新蛇的位置相差一个单位,所以看起来蛇会多一节身体。

食物的产生:通过一系列运算产生在要求范围内的的随机数,此时的随机数便是随即点,可以通过产生的随即点的坐标画出随即点,也就是食物了。

蛇吃食物:蛇头的位置可以与随即点的位置坐标判断,如果此时两点的坐标是相同的,那么该食物被蛇吃掉,蛇的长度+1。

判断游戏结束的条件:当蛇的头部位置坐标与边界坐标重合或者蛇头的位置与自身相重合,游戏结束暂停:游戏过程中,按空格键可以使游戏暂停,在按空格键进入被暂停的游戏2.2游戏流程由程序分析知,该游戏是用方向键实现贪吃蛇的移动,游戏大概流程分为:游戏初始化(描绘围墙、蛇体、食物等及其颜色),游戏过程(通过四个方向键控制蛇头带动身体移动),游戏结束(显示总分并判断是否重新游戏)。

C#编程 [“贪吃蛇”小游戏]

C#编程 [“贪吃蛇”小游戏]

C#编程 [“贪吃蛇”小游戏]一、项目内容及要求编程实现一个“贪吃蛇”小游戏,具体要求如下:1)程序启动后,蛇身默认向右移动,直到用户按下方向键改变运动方向。

2)玩家通过键盘上的上、下、左、右四个方向键控制蛇在地图上寻找豆,蛇吃下豆后,蛇身加长一节。

3)界面上任意时刻同时会有三个豆,豆的位置随机生成,定时刷新。

4)在游戏过程中,若蛇头碰到场地边界或自己的身体,则游戏失败。

二、算法分析一、控件设计1)主菜单控件 MenuStrip2)面板控件 Panel:背景色为黄色3)标签控件 Label1、Label2二、类设计1)Game类,入口主窗体、游戏界面类。

Game类的主要功能包括控制游戏的开始与暂停、选择游戏关卡、声明并创建蛇的行为及豆的行为线程,启动线程。

2)Block类:代表蛇和豆一个节点的块类,游戏中需要绘制的块分为以下三种情况:(1)蛇头:红色椭圆(2)蛇身:红色矩形(3)豆:绿色椭圆添加类的属性:块的颜色、是否蛇头、是否豆,横坐标X、纵坐标Y添加类的行为:绘制块draw()方法,构造函数(判断是否豆),重载构造函数3)Snake类:定义游戏中的蛇。

其属性包括蛇移动的方向以及蛇身的集合(泛型集合List<>);其行为成员包括蛇吃豆、吃过豆之后蛇身增长、蛇身移动以及判断蛇是否死亡等。

4)Beans类:定义游戏中的豆。

其属性包括3个豆组成的列表(List<>);其行为成员包括定时刷新豆的集合以及移除某个豆。

三、界面及运行过程四、关键代码(代码要求注释完整,例如:变量的作用,语句的作用,方法的功能等都要加注释说明)namespace项目5{public partial class Form1 : Form{Food food = new Food();Snake snake = new Snake();private int score;public Form1(){InitializeComponent();timer1.Enabled = false;//timer是否可用timer1.Interval = snake.Speed; //蛇初始速度score = 0;}Point[] body = new Point[1000]; //蛇最大长度private void操作ToolStripMenuItem_Click(object sender,{}protected override bool ProcessDialogKey(Keys keyData){switch (keyData){case Keys.Up:if (snake.Direction != Direction.down){snake.Direction = Direction.up;}break;case Keys.Down:if (snake.Direction != Direction.up){snake.Direction = Direction.down;}break;case Keys.Left:if (snake.Direction != Direction.right){snake.Direction = Direction.left;}break;case Keys.Right:if (snake.Direction != Direction.left){snake.Direction = Direction.right;}break;}return base.ProcessDialogKey(keyData);}private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e){}private void开始游戏ToolStripMenuItem_Click(object sender,{label2.Text = "0";score = 0;timer1.Enabled = true;if (snake.Live == false){snake = new Snake();snake.resetSnake();label2.Text = "0";score = 0;timer1.Enabled = true;}}private void关卡设定ToolStripMenuItem_Click(object sender, EventArgs e){}private void暂停游戏ToolStripMenuItem_Click(object sender, EventArgs e){if (暂停游戏ToolStripMenuItem.Text == "暂停游戏"){timer1.Enabled = false;暂停游戏ToolStripMenuItem.Text = "继续";}else{timer1.Enabled = true;暂停游戏ToolStripMenuItem.Text = "暂停游戏";}}private void退出游戏ToolStripMenuItem_Click(object sender, EventArgs e){this.Close();}private void第一关ToolStripMenuItem_Click(object sender,{timer1.Interval = 200;}private void第二关ToolStripMenuItem_Click(object sender, EventArgs e){timer1.Interval = 150;}private void第三关ToolStripMenuItem_Click(object sender, EventArgs e){timer1.Interval = 100;}private void第四关ToolStripMenuItem_Click(object sender, EventArgs e){timer1.Interval = 50;}private void第五关ToolStripMenuItem_Click(object sender, EventArgs e){timer1.Interval = 30;}private void timer1_Tick(object sender, EventArgs e){snake.Move();panel1.Invalidate();//蛇运动后,把picturebox1当前界面设为无效,并引发paint事件,重新绘制界面}private void panel1_Paint(object sender, PaintEventArgs e) {Graphics g = e.Graphics;snake.Draw(g);//画蛇if (snake.live == false){timer1.Enabled = false;//timer1不可用}if(snake.Body[0].X == food.Position.X && snake.Body[0].Y == food.Position.Y){snake.Eat(food);food.Exist = false;score += 10;label2.Text = score.ToString();}if (food.Exist){food.Draw(g);}else{food.Position = food.createdFood();//重新创造绘制食物 food.Exist = true;food.Draw(g);}}}}using System;using System.Collections.Generic;using System.Linq;using System.Text;using ponentModel;using System.Data;using System.Drawing;using System.Windows.Forms;using System.Media;using System.IO;namespace项目5{class Block{}public enum Direction{up, down, left, right,}class Snake{public int score;public const int side = 10;//蛇身每个节点长度Point[] body = new Point[600];//蛇身最大长度Direction direction;//蛇初始移动方向public bool live;//蛇存活状态int number;//蛇身节点个数int speed = 120;//蛇的初始速度public int Speed//Speed属性{get{return speed;}set{speed = value;}}public Direction Direction//Direction的属性 {get{return direction;}set{direction = value;}}public bool Live//Live的属性{get{return live;}set{live = value;}}public Point[] Body//Body属性{get{return body;}}public Snake()//蛇类的构造器初始值{Point node1 = new Point(100, 50);Point node2 = new Point(90, 50);body[0] = node1;body[1] = node2;number = 2;direction = Direction.right;live = true;}public void Move()//蛇的移动{for (int i = this.number - 1; i > 0; i--)//蛇移动的方式{body[i] = body[i - 1];}switch (this.direction)//蛇移动的方向{case Direction.up:body[0].Y -= side;break;case Direction.down:body[0].Y += side;break;case Direction.left:body[0].X -= side;break;case Direction.right:body[0].X += side;break;}if (body[0].X < 10 || body[0].X > 537 || body[0].Y < 10 || body[0].Y > 346)//蛇撞四壁挂{this.live = false;}for (int i = 1; i <= number - 1; i++){if (body[0].X == body[i].X && body[0].Y == body[i].Y) {this.live = false;}}}public void Eat(Food food)//蛇吃食物{Label label2 = new Label();body[number] = food.Position;this.number++;//长度加score += 2;label2.Text = Convert.ToString(score);}public void Draw(Graphics g)//绘制蛇{SolidBrush RedBrush = new SolidBrush(Color.Red);g.DrawEllipse(Pens.Red, body[0].X, body[0].Y, side, side);g.FillEllipse(RedBrush, body[0].X, body[0].Y, side, side);for (int i = 1; i <= number - 1; i++){g.DrawRectangle(Pens.Red, body[i].X, body[i].Y, side, side);g.FillRectangle(RedBrush, body[i].X, body[i].Y, side, side);}if (this.live == false){g.DrawString("Game Over!", new Font("宋体", 36, FontStyle.Bold), RedBrush, new Point(100, 150));}}public void resetSnake()//重新设置蛇{Point node1 = new Point(100, 320);Point node2 = new Point(90, 320);body[1] = node1;body[0] = node2;number = 2;direction = Direction.right;live = true;}}class Food{Point position;//食物位置Boolean exist;//判断失误是否存在public Food(){position = this.createdFood();exist = true;}public Point Position//Position的属性{get{return position;}set{position = value;}}public Boolean Exist//Exist属性{get{return exist;}set{exist = value;}}public Point createdFood()//随机产生食物 {Point position = new Point();Random ran = new Random();position.X = ran.Next(1, 30) * 10; position.Y = ran.Next(1, 30) * 10;return position;实用文档}public void Draw(Graphics g)//绘制食物{SolidBrush greenBrush = new SolidBrush(Color.Green);g.FillEllipse(greenBrush, position.X, position.Y, 10, 10); }}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DA TA SEGMENTdw 0,0snk db 1blk db 32food db 3tal1 db 4tal2 db 2adrs db 5len db ?pst db ?addrs dw ?frow db ?fcol db ?hwrt db ?gmov db 'game over press r to restart press q to quit $'score1 db 'score :$'score2 db ?score0 db 1zero db 48writer db 'Developer: Geniusdot $'emaildb'e-mail:**************$'msg1 db 'The way to play the game:$'way db ' press w to up ,press s to down,press a to left,press d to right$' msg db 'Press any key(except a,s,d,w) to start$'DA TA ENDSSTACK SEGMENT stackdb 200 dup(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKstart:mov ax,datamov ds,axmov ax,0mov es,axmov frow,10mov fcol,6mov dh,10mov dl,26mov ah,2int 10hmov ah,9 lea dx,msg1 int 21hmov dh,11 mov dl,7 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,way int 21hmov dh,12 mov dl,20 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,msg int 21hmov ah,0int 16hmov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10hmov dh,0 mov dl,0 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,score1 int 21hmov dl,15 mov ah,2 mov bh,0int 10hlea dx,writerint 21hmov ah,9lea dx,emailint 21hmov score2,48push es:[9*4] ;将原int9入口地址保存pop ds:[0]push es:[9*4+2]pop ds:[2]mov word ptr es:[9*4],offset int9 ;更改中断向量表mov es:[9*4+2],csjmp aawrite macro row,col,cnt ;宏定义用于向当前光标处输出字符push bxpush cxpush dxmov dh,rowmov dl,colmov ah,2mov bh,0int 10hmov ah,9mov bl,11mov cx,1lea di,cnt ;50mov al,[di]int 10hpop dxpop cxpop bxendmreadh macro row,col ;宏定义用于读出当前光标处字符push dxpush bxmov dh,rowmov dl,colmov ah,2mov bh,0int 10hmov ah,08hint 10hmov pst,alpop bxpop axpop dxendmwnear macro ;宏定义只用在readcg宏中当readcg的所有判断都不成立调用此宏local wnext1local wnext2local wnext3local wnext4push dxdec dhreadh dh,dlcmp pst,1jne wnext1write dh,dl,tal2jmp wnext4wnext1:inc dhdec dlreadh dh,dlcmp pst,1jne wnext2write dh,dl,tal2jmp wnext4wnext2:inc dhinc dlreadh dh,dlcmp pst,1jne wnext3write dh,dl,tal2jmp wnext4dec dhinc dlreadh dh,dlcmp pst,1jne wnext4write dh,dl,tal2wnext4:pop dxendmreadcg macro row,col ;宏定义用于改变判断出来的字符local tnup,tnup1,tnup2,tnlf,tnlf1,tnlf2,tndn,tndn1,tndn2,tnrt,tnrt1,tnrt2,gooutpush bxpush axpush dxwrite dh,dl,tal1dec rowreadh dh,dlcmp pst,4jne tnup1jmp tnup2tnup1:jmp near ptr tnuptnup2:write dh,dl,blkinc dhinc dhreadh dh,dlcmp pst,1jne tnupwrite dh,dl,tal2jmp near ptr goouttnup:pop dxpush dxdec colreadh dh,dlcmp pst,4jne tnlf1jmp tnlf2tnlf1:jmp near ptr tnlf tnlf2:write dh,dl,blk inc dlinc dlreadh dh,dlcmp pst,1jne tnlfwrite dh,dl,tal2 jmp near ptr goout tnlf:pop dxpush dxinc rowreadh dh,dlcmp pst,4jne tndn1jmp tndn2tndn1:jmp near ptr tndn tndn2:write dh,dl,blk dec dhdec dhreadh dh,dlcmp pst,1jne tndnwrite dh,dl,tal2 jmp near ptr goout tndn:pop dxpush dxinc colreadh dh,dlcmp pst,4jne tnrt1jmp tnrt2tnrt1:jmp near ptr tnrt tnrt2:write dh,dl,blk dec dldec dlreadh dh,dlcmp pst,1jne tnrtwrite dh,dl,tal2jmp near ptr goouttnrt:pop dxpush dxwneargoout:pop dxpop axpop bxendmaddone: ;此标号功能是将蛇身增加一push dxinc score2mov dh,1mov dl,0mov cx,23cmpad1:push cxmov cx,79cmpad2:readh dh,dlcmp pst,2jne nextad3jmp nextad4nextad3:jmp near ptr nextadnextad4:write dh,dl,snkdec dhreadh dh,dlcmp pst,4jne natupwrite dh,dl,tal2dec dhwrite dh,dl,tal1jmp outonatup:inc dhreadh dh,dlcmp pst,4jne natlfwrite dh,dl,tal2dec dlwrite dh,dl,tal1jmp outonatlf:inc dhinc dlreadh dh,dlcmp pst,4jne natdnwrite dh,dl,tal2inc dhwrite dh,dl,tal1jmp outonatdn:dec dhinc dlreadh dh,dlcmp pst,4jne natrtwrite dh,dl,tal2inc dlwrite dh,dl,tal1 natrt:outo:pop cxjmp near ptr endad nextad:inc dljmp nextad2 chgad2:jmp near ptr cmpad2 nextad2:loop chgad2sub dl,79inc dhpop cxjmp nextad1 chgad1:jmp near ptr cmpad1loop chgad1endad:pop dxjmp near ptr crtfaa: ;从这开始产生最原始的蛇mov addrs,offset turnrightmov dh,10mov dl,1mov cx,3write dh,dl,tal1inc dlwrite dh,dl,tal2wrt:inc dlwrite dh,dl,snkloop wrtmov len,6mov ax,0jmp wrt1ovflw: ;当蛇碰壁或自身转到此游戏结束mov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hmov dh,17mov dl,17mov ah,2mov bh,0int 10hmov ah,9lea dx,gmovint 21hmov ax,0 ;恢复int9中断mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]stop:mov ah,0int 16hcmp al,'r'je aa1jmp aa2aa1:jmp near ptr startaa2:cmp al,'q'jne stopjmp near ptr exitwrt1: ;此处蛇行走过程的无限循环call dlypush dxinc dhcmp dh,25je ovflwinc dlcmp dl,80je ovflwpop dxpush dxdec dhcmp dh,0je ovflwdec dlcmp dl,-1je ovflwpop dxpush dxlea ax,turnrightcmp addrs,axjne tonxt2inc dlreadh dh,dlcmp pst,1je tonxt1cmp pst,2je tonxt1cmp pst,4je tonxt1jmp tonxt2 tonxt1:jmp ovflw tonxt2:pop dxpush dxlea ax,turnup cmp addrs,ax jne tonxt4dec dhreadh dh,dl cmp pst,1je tonxt3cmp pst,2je tonxt3cmp pst,4je tonxt3jmp tonxt4 tonxt3:jmp ovflw tonxt4:pop dxpush dxlea ax,turndown cmp addrs,ax jne tonxt6inc dhreadh dh,dl cmp pst,1je tonxt5cmp pst,2je tonxt5cmp pst,4je tonxt5jmp tonxt6 tonxt5:jmp ovflw tonxt6:pop dxpush dxlea ax,turnbackcmp addrs,axjne tonxt8dec dlreadh dh,dlcmp pst,1je tonxt7cmp pst,2je tonxt7cmp pst,4je tonxt7jmp tonxt8tonxt7:jmp ovflwtonxt8:pop dxjmp nextacrtf1:jmp near ptr addone crtf:call rand1call rand2inc frowmov ah,frowmov al,fcolpush dxmov dh,1mov dl,0push cxmov cx,23check1:push cxmov cx,79check2:readh dh,dlcmp pst,1je nextncmp pst,2je nextncmp pst,4je nextnjmp nextnn nextn:cmp ax,dxje crtfinc dlloop check2inc dhsub dl,79pop cxloop check1pop cxpop dxwrite frow,fcol,food nexta:mov ah,frowmov al,fcolcmp ax,dxje crtf12jmp crtf13crtf12:jmp near ptr crtf1 crtf13:push dxcmp score2,58jl normalmov score2,49inc score0 normal:mov dh,0mov dl,8write dh,dl,score2 add dl,score0write dh,dl,zero pop dxcmp adrs,17je jmp1cmp adrs,145je jmp1cmp adrs,31je jmp2cmp adrs,159je jmp2cmp adrs,32je jmp3cmp adrs,160je jmp3cmp adrs,30cmp adrs,158je jmp4jmp addrsjmp1:lea ax, turndowncmp ax,addrsje jmp2mov addrs,offset turnupjmp near ptr turnupjmp2:lea ax,turnupcmp ax,addrsje jmp1mov addrs,offset turndownjmp near ptr turndownjmp3:lea ax,turnbackcmp ax,addrsje jmp4mov addrs,offset turnrightjmp near ptr turnrightjmp4:lea ax,turnrightcmp ax,addrsje jmp3mov addrs,offset turnbackjmp near ptr turnbackturnright: ;此处实现蛇向左走push dxmov dh,1mov dl,0mov cx,23cmpr1:push cxmov cx,79cmpr2:readh dh,dlcmp pst,2je nextr4jmp near ptr nextrreadcg dh,dlpop cxjmp near ptr endrnextr:inc dljmp nextr2chgr2:jmp near ptr cmpr2nextr2:loop chgr2sub dl,79inc dhpop cxjmp nextr1chgr1:jmp near ptr cmpr1nextr1:loop chgr1endr:pop dxinc dlwrite dh,dl,snkjmp near ptr wrt1turnup: ;此处实现蛇向上走push dxmov dh,1mov dl,0mov cx,23cmpu1:push cxmov cx,79cmpu2:readh dh,dlcmp pst,2jne nextu3jmp nextu4nextu3:jmp near ptr nextunextu4:readcg dh,dljmp near ptr endunextu:inc dljmp nextu2chgu2:jmp near ptr cmpu2nextu2:loop chgu2sub dl,79inc dhpop cxjmp nextu1chgu1:jmp near ptr cmpu1nextu1:loop chgu1endu:pop dxdec dhwrite dh,dl,snkjmp near ptr wrt1turndown: ;此处实现蛇向下走push dxmov dh,1mov dl,0mov cx,23cmpd1:push cxmov cx,79cmpd2:readh dh,dlcmp pst,2jne nextd3jmp nextd4nextd3:jmp near ptr nextdnextd4:readcg dh,dlpop cxjmp near ptr enddinc dljmp nextd2chgd2:jmp near ptr cmpd2nextd2:loop chgd2sub dl,79inc dhpop cxjmp nextd1chgd1:jmp near ptr cmpd1nextd1:loop chgd1endd:pop dxinc dhwrite dh,dl,snkjmp near ptr wrt1turnback: ;此处实现蛇向右走push dxmov dh,1mov dl,0mov cx,23cmpb1:push cxmov cx,79cmpb2:readh dh,dlcmp pst,2jne nextb3jmp nextb4nextb3:jmp near ptr nextbnextb4:readcg dh,dlpop cxjmp near ptr endbnextb:inc dljmp nextb2chgb2:jmp near ptr cmpb2nextb2:loop chgb2sub dl,79inc dhpop cxjmp nextb1chgb1:jmp near ptr cmpb1nextb1:loop chgb1endb:pop dxdec dlwrite dh,dl,snkjmp near ptr wrt1exit:mov ax,0 ;恢复int9中断mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]mov ah,4chint 21hint9: ;更改后的中断服务程序push axin al,60hmov adrs,almov al,20hout 20h,alpop axiretDL Y PROC near ;延时子程序PUSH CXPUSH DXMOV DX,10000DL1: MOV CX,9801DL2: LOOP DL2DEC DXJNZ DL1POP DXPOP CXRETDL Y ENDPRAND1 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,23 ;除23,产生0~23余数DIV DLMOV frow,AH ;余数存frow,作随机行数POP AXPOP DXPOP CXRETRAND1 ENDPRAND2 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,79 ;除79,产生0~79余数DIV DLMOV fcol,AH ;余数存fcol,作随机列数POP AXPOP DXPOP CXRET RAND2 ENDP CODE ENDSEND start。

相关文档
最新文档