文档库 最新最全的文档下载
当前位置:文档库 › 接球游戏汇编源代码

接球游戏汇编源代码

接球游戏汇编源代码
接球游戏汇编源代码

;程序名称:接球游戏 ;

;作者:周涌 ;

;时间:2010年6月22日 ;

;注意:本程序中的延时子程序delay 和delay_speed 在不同的机型上延时的效果有可能不同, ;

; 延时效果不佳时,需要对延时的长度做调整(只需要更改相应的延时程序中参数的值) ;

; 本程序在有的系统中可能会出现“does support fullscreen mode”的问题而不能运行,;

; 但在学院机房的xp系统中可正常运行 ;

;游戏简介:小球在框内反弹,小球运动到最下面时能被可左右移动的小条挡住,玩家就可得1分 ;

; 没有接住小球,游戏就失败。游戏得分到9分后清零,并且速度等级加1,小球的运 ;

; 动速度就会加快。当速度等级到达6,且分数到9,玩家就赢得游戏的胜利。 ;

; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;

;******************************************************************************* ******

data segment; 在这里定义的变量统一的加下划线前缀

_f_posx dw 101;

_f_posy dw 1; frame(外框)的左上角在屏幕中xy坐标初始化为(1,1) _f_width dw 100; frame 的宽度初始化为100

_f_height dw 150; frame 的高度150

_f_border_color db 2;

_bar_color db 1; 小条的颜色值 (0对应的是背景颜色,1对应的是绿色,2对应的是红色,3对应的是暗红色)

_speedstr db "speed:$"

_scorestr db "score:$"

_startstr db "start:t$"

_leftstr db"left :s$"

_rightstr db "right:f$"

_exitstr db "exit :q$"

_bar_posx dw 102 ;指定小条的左上角点的x坐标值是102,而y坐标值是固定的132,小条的x坐标变动范围是[102,160]

_speed db 31h ;小球的移动的初始速度是1,'1'的ascii码值是31h

_score db 30h ;游戏的初始得分是0 '0'的ascii码值是30h

_gameoverstr db "GAME OVER$"

_gamewinstr1 db "GOOD JOB!$"

_gamewinstr2 db "YOU WIN!$"

_r_q_str1 db "q: exit$"

_r_q_str2 db "r: restart$"

data ends

stack1 segment STACK

DB 200 DUP(?)

stack1 ends

code segment

;******************************************************************************* *****

;*主程序*

;******************************************************************************* *****

main proc far

assume ds:data, cs:code,ss:stack1

start:

mov ax,data

mov ds,ax

mov ah,00 ; int10的0号功能是设置显示方式, 具体的方式参数放在了al中 mov al,04 ;设置显示方式为320*200 图形4色

int 10h

mov ah,0bh ;int10的0b号功能是只彩色调色板ID,bh中方调色板ID,bL中放和ID配套使用的颜色

mov bh,00

mov bl,1

int 10h

mov ah,0bh

mov bh,1

mov bl,2

int 10h

call draw_frame ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;调用画框函数

mov cx,200

mov dx,150

call draw_ball ;draw_ball的两个参数是cx,dx,通过cx,dx指定要画的小球的左上角的坐标值,

;画出一个长宽为4个像素的小方块

mov cx,98

mov dx,150

call draw_ball

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;下面就来让小球动起来

restart:

mov cx,149;

mov dx,2 ;指定小球的初始位置是(149,2)

mov si,1 ;si 对应cx,di对应dx

mov di,0 ;0对应自加,1对应自减

call draw_ball;

call draw_bar ;

call show_speed_score ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;等待键盘的输入

begin:

mov ah,08 ;键盘输入无回显

int 21h

cmp al,'q'

je endgame ;如果输入的是q就跳到endgame处终止程序

cmp al,'t'

je rotate

jmp begin

endgame:

mov ah,4ch

int 21h

rotate:

cmp dx,128

jne next0

;check_game_fail用来了ax作为返回参数,故在调用前要将ax中的数据保护起来

;保护ax中的数据

push ax

call check_game_fail ;子程序check_game_fail,传入的参数是dx和cx,返回的是ax,

;返回ax=0,表明游戏没有失败,就得一分,ax=1表示游戏失败了

cmp ax,1

je LAST1

mov al,_score ; ax!=1的时候,就该加一分了

inc al ;加一分

cmp al,3ah ;比‘9’的ascii码值是39h,如果加的分数等于10就将分数清零,且速度等级加1 ,

jb next0_1;

mov _score,30h ;;分数清零

mov al,_speed

inc al ;速度自增1

cmp al,37h ;'7'的ascii码值是37h,速度设置的等级是从1到6,包括6, je LAST2 ; 如果速度等级超过了6,说明玩家取得了游戏的最终胜利,程序跳转到LAST mov _speed,al

jmp next0_end

next0_1:

mov _score,al

next0_end:

;恢复ax中的数据

pop ax

next0:

call move_ball

;call draw_bar

call show_speed_score ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示分数和速度等级

push si

push di

push cx

push dx

call delay_speed ; 这个子程序的参数就是变量_speed,根据当前_speed的值来确定延时的长短

mov ah,06 ;;;;;;;;;;;;;;;;;;;;;;;了不起的06功能,键盘输入,但是不中断程序

mov dl,0ffh

int 21h

cmp al,'q' ;如果输入时‘q’就跳到LAST4

je LAST4

cmp al,'f'

jne next1

call mov_bar_right ;al=='f',就执行一下右移子程序

next1:

cmp al,'s'

jne next2

call mov_bar_left ;al=='s',就执行一下左移子程序

;恢复数据

pop dx

pop cx

pop di

pop si

jmp rotate

LAST1:

;;;;;;;;;;;;;;;;;;;;;;;;;; 显示“GAMEM OVER”

call output_GameOver;

jmp LAST3

LAST2:

;;;;;;;;;;;;;;;;;;;;;;;;;;;显示“游戏胜利”的提示信息

call output_GameWin;

LAST3:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示提示信息“如果输入r就重新开始游戏,如果输入q 就退出程序”

call output_r_q ;

reinput:

mov ah,08 ;键盘输入无回显

int 21h

cmp al,'q' ;如果输入的是‘q’字符就跳转到LAST4

je LAST4

cmp al,'r'

jne reinput; 不等就要求重新输入“r或q”

;;;;;;;;;;;;;如果输入的是r,那就要重新开始游戏,下面就来将框内的图形擦除掉并将相应变量的值恢复到初始状态

call clean_ball;

call clean_bar;

call clean_words; 擦除方框以内的文字信息

mov ax,102

mov _bar_posx,ax ;指定小条的左上角点的x坐标值是102,而y坐标值是固定的132,小条的x坐标变动范围是 ;[102,160]

mov al,31h

mov _speed,al ;小球的移动的初始速度是1,'1'的ascii码值是31h

mov al,30h

mov _score ,al

jmp restart

LAST4:

mov ah,4ch

main endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序结束

;******************************************************************************* *****

;*画框的子程序*

;******************************************************************************* *****

draw_frame proc near

;;;;;先保护好数据

push ax

push bx

push cx

push dx

;;;;;下面就开画线了

;;;;;;;;;;;;;;;;;画top_line;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov al,_f_border_color ;放入颜色值

mov dx,_f_posy ;指定像素的行数

mov cx,_f_posx ;指定像素所在的列数

top_line:

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc cx ;cx自增1

cmp cx,200

jle top_line; ;

;;;;;;;;;;;;;;;;;画down_line;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov al,_f_border_color ;放入颜色值

mov dx,_f_height

mov cx,_f_posx

down_line:

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc cx ;cx自增1

cmp cx,200 ;

jle down_line;

;;;;;;;;;;;;;;;;;画left_line;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov al,_f_border_color ;放入颜色值

mov dx,_f_posy ;指定像素的行数

mov cx,_f_posx ;指定像素所在的列数

left_line:

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc dx ;dx自增1

cmp dx,_f_height ;_f_height =150px

jle left_line;

;;;;;;;;;;;;;;;;;画right_line;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov dx,_f_posy

mov cx,200

right_line:

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc dx ;dx自增1

cmp dx,_f_height ;

jle right_line;

;;;;;;;恢复数据

pop dx

pop cx

pop bx

pop ax

ret

draw_frame endp

;******************************************************************************* *****

;*画小球的子程序,用cx,dx传入小球左上角的坐标是(cx,dx)*

;******************************************************************************* *****

draw_ball proc near

;mov dx,80;

;mov cx,150; ; 指定小球的左上角的坐标

push ax

push di

push si

push dx

push cx

push cx

push cx

push cx

push cx

add si,4

mov di,cx

add di,4

mov al,_f_border_color ;放入颜色值

ball_line:

cmp dx,si

je ball_line_end

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc cx

cmp cx,di

jne ball_line

pop cx

inc dx

jmp ball_line

ball_line_end:

pop cx ;恢复数据

pop dx ;恢复数据

pop si

pop di

pop ax

ret

draw_ball endp

;******************************************************************************* *****

;*擦除小球的子程序,*

;*和画小球的程序几乎一样,只有画图的颜色不一样而已*

;******************************************************************************* *****

clean_ball proc near

;mov dx,80;

;mov cx,150; ; 指定小球的左上角的坐标

push ax

push di

push si

push dx

push cx

push cx

push cx

push cx

mov si,dx

add si,4

mov di,cx

add di,4

mov al,0 ;放入颜色值0,应该放入背景颜色的值

clean_ball_line:

cmp dx,si

je clean_ball_line_end

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc cx

cmp cx,di

jne clean_ball_line

pop cx

inc dx

jmp clean_ball_line

clean_ball_line_end:

pop cx ;恢复数据

pop dx ;恢复数据

pop si

pop di

pop ax

ret

clean_ball endp

;******************************************************************************* ********

;*画小条的子程序,*

;*参数:cx 。*

;*调用这个子程序将画出一个符合下面要求的矩形条:长度是40个像素,高度是4个像素,左上 *

;*角的y坐标值固定为132,左上角x坐标值是_bar_posx中的值。这个程序中要求x坐标的取值属于[102,160]*

;*坐标值由_bar_posx指定,*

;*******************************************************************************

********

draw_bar proc near

;保护数据

push ax

push di

push si

push dx

push cx

mov cx,_bar_posx;

push cx

push cx

push cx

push cx

mov dx,132 ;指定左上角的y坐标值为132 mov si,dx

add si,4

mov di,cx

add di,40

mov al,_bar_color ;放入颜色值

bar_line:

cmp dx,si

je bar_line_end

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc cx

cmp cx,di

jne bar_line

pop cx

inc dx

jmp bar_line

bar_line_end:

;恢复数据

pop cx

pop dx ;恢复数据

pop si

pop di

pop ax

ret

draw_bar endp

;******************************************************************************* *****

;*擦除小条的子程序,和上面的draw_bar的唯一区别在于画图的颜色值变成了0,达到擦除的效果*

;******************************************************************************* *****

clean_bar proc near

push ax

push di

push si

push dx

push cx

mov cx,_bar_posx;

push cx

push cx

push cx

push cx

mov dx,132 ;指定左上角的y坐标值为132

mov si,dx

add si,4

mov di,cx

add di,40

mov al,0 ;放入颜色值

clean_bar_line:

cmp dx,si

je clean_bar_line_end

mov ah,0ch ;int10的画点的功能参数

mov bh,0 ;指定页码为0

int 10h ;调用功能画点

inc cx

cmp cx,di

jne clean_bar_line

pop cx

inc dx

jmp clean_bar_line

clean_bar_line_end:

pop cx ;恢复数据

pop dx ;恢复数据

pop si

pop di

pop ax

ret

clean_bar endp

;******************************************************************************* *****

;*将小条右移的子程序*

;******************************************************************************* *****

mov_bar_right proc near

;保护数据

push ax

mov ax,_bar_posx

cmp ax,160 ;小条的左上角的x坐标举止范围是[102,160]

jae mov_bar_right_end; 如果小条的位置已经在最右端了,就不用在重画了,直接跳到子程序结尾

call clean_bar; 先要擦除原图

add ax,2 ;小条每次移动2个像素,

mov _bar_posx,ax

call draw_bar ;重画小条

;恢复数据

mov_bar_right_end:

pop ax

ret

mov_bar_right endp

;******************************************************************************* *****

;*将小条左移的子程序*

;******************************************************************************* *****

mov_bar_left proc near

;保护数据

push ax

mov ax,_bar_posx

cmp ax,102 ;小条的左上角的x坐标举止范围是[102,160]

jbe mov_bar_left_end; 如果小条的位置已经在最左端了,就不用在重画了,直接跳到子程序结尾

call clean_bar; 先要擦除原图

sub ax,2

mov _bar_posx,ax

call draw_bar ;重画小条

;恢复数据

mov_bar_left_end:

pop ax

ret

mov_bar_left endp

;******************************************************************************* *****

;*延时子程序1,被下面的那个子程序调用的*

;******************************************************************************* *****

delay proc near

push cx

mov cx,60000

waste0: loop waste0

mov cx,60000

waste1: loop waste1

mov cx,60000

waste2: loop waste2

mov cx,60000

waste3: loop waste3

pop cx

ret

delay endp

;******************************************************************************* *****

;*延时程序2,根具当前的speed的值来确定延时的长短*

;*在不用的不同的速度的情况下,调用的delay子程序的次数不同;*

;*速度等级从1到6一次对应调用delay的次数依次为60次、50次、40次、30次、20次、10次 *

;******************************************************************************* *****

delay_speed proc near ;

;保护数据

push ax

push bx

push cx

xor cx,cx

xor ax,ax

xor bx,bx

mov ax,37h; 字符'7'的ASCII码值是37h

mov bl,_speed ;注意:_speed中存的的数字字符的ascii值

sub ax,bx

mov bx,10

mul ax ;让ax中的值乘以10

mov cx,ax

waste11:

call delay

loop waste11

;恢复数据

pop cx

pop bx

pop ax

ret

delay_speed endp

;******************************************************************************* *****

;*move_ball子程序移动小球的位置*

;传入的参数是cx dx si di,返回的参数也是cx,dx,si,di * ;cx,dx 是小球的当前坐标,si为标志cx或自增或自减 di标志dx是该自加或该自减*

;******************************************************************************* *****

move_ball proc near

call clean_ball ;首先得要擦除原来小球的图像

cmp si,0 ;如果si==0,则要重画的小球的x坐标为cx++,如果si!=0,则要重画的小球的x坐标为cx--

je x_jia

dec cx

jmp x_end

x_jia:

inc cx

x_end:

cmp di,0 ;如果di==0,则要重画的小球的y坐标为dx++,如果di!=0,则要重画的小球的y坐标为dx--

je y_jia

dec dx

jmp y_end

y_jia:

inc dx

y_end:

call draw_ball

;;;;;;;;;;;;;画完图后根据当前的坐标来更新下si di的值

cmp cx,102

je si_0 ;如果cx==102了,说小球已经到了左边界,x坐标值就该自增了,si==0,

cmp cx,196 ;就是所接下来画的小球的x坐标是cx++

je si_1

jmp si_end; si不需要变换

si_0:

mov si,0

jmp si_end

si_1:

mov si,1

si_end:

cmp dx,2

je di_0 ;如果dx==2了,说小球已经到了上边界,y坐标值就该自增了,di==0,

cmp dx,128 ;就是所接下来画的小球的y坐标是dx++

je di_1 ;如果dx==129了,说小球已经到了下边界,y坐标值就该自增了,di==1,

;就是所接下来画的小球的y坐标是dx--

jmp di_end ; di不需要变换

di_0:

mov di,0

jmp di_end

di_1:

mov di,1

di_end:

ret

move_ball endp

;******************************************************************************* *****

;*显示分数和速度值的程序*

;******************************************************************************* *****

show_speed_score proc near

;保护数据

push ax

push bx

push dx

mov ah, 2

mov bh,0

mov dl,3; 指定列数

mov dh,1 ;指定行数

int 10h;;;置光标的位置

mov ah,09h

lea dx,_speedstr

int 21h

mov ah, 2

mov bh,0

mov dl,9; 指定列数

mov dh,1 ;指定行数

int 10h;;;置光标的位置

mov ah,02h;显示单个字符

mov dl,_speed; ;_speed中存的是速度值的ascii值 int 21h

mov ah, 2

mov bh,0

mov dl,3; 指定列数

mov dh,2 ;指定行数

int 10h;;;置光标的位置

mov ah,09h

lea dx,_scorestr

int 21h

mov ah, 2

mov bh,0

mov dl,9; 指定列数

mov dh,2 ;指定行数

int 10h;;;置光标的位置

mov ah,02h;显示单个字符

mov dl,_score; ;_score中存的是分数的ascii值 int 21h

mov ah, 2 ; 显示按键提示信息

mov bh,0

mov dl,3; 指定列数

mov dh,4 ;指定行数

int 10h;;;置光标的位置

mov ah,09h

lea dx,_startstr

int 21h

mov ah, 2 ; 显示按键提示信息

mov bh,0

mov dl,3; 指定列数

mov dh,5 ;指定行数

int 10h;;;置光标的位置

mov ah,09h

lea dx,_leftstr

int 21h

mov ah, 2 ; 显示按键提示信息

mov bh,0

mov dl,3; 指定列数

mov dh,6 ;指定行数

int 10h;;;置光标的位置

mov ah,09h

lea dx,_rightstr

int 21h

mov ah, 2 ; 显示按键提示信息

mov bh,0

mov dl,3; 指定列数

mov dh,7 ;指定行数

int 10h;;;置光标的位置

mov ah,09h

lea dx,_exitstr

int 21h

; 恢复数据

pop dx

pop bx

pop ax

ret

show_speed_score endp

;******************************************************************************* *****

;*显示“GAME OVER ”子程序*

;******************************************************************************* *****

output_GameOver proc near

push ax

push bx

push dx

mov ah, 2

mov bh,0

mov dl,14; 指定列数

mov dh,7 ;指定行数

int 10h ;;;置光标的位置

mov ah,09h

lea dx,_gameoverstr

int 21h

pop dx

pop bx

pop ax

ret

output_GameOver endp

;******************************************************************************* *****

;*显示“游戏胜利”子程序*

;******************************************************************************* *****

output_GameWin proc near

push ax

push bx

push dx

mov ah, 2

mov bh,0

mov dl,14; 指定列数

mov dh,7 ;指定行数

int 10h ;;;置光标的位置

mov ah,09h

lea dx,_gamewinstr1

int 21h

mov ah, 2

mov bh,0

mov dl,14; 指定列数

mov dh,8 ;指定行数

int 10h ;;;置光标的位置

mov ah,09h

lea dx,_gamewinstr2

int 21h

pop dx

pop bx

pop ax

ret

output_GameWin endp

;******************************************************************************* *****

;* 显示“是退出还是重新游戏”的提示信息的子程序*

;******************************************************************************* *****

output_r_q proc near

push ax

push bx

push dx

mov ah, 2

mov bh,0

mov dl,14; 指定列数

mov dh,9 ;指定行数

int 10h ;;;置光标的位置

mov ah,09h

lea dx,_r_q_str1

int 21h

mov ah, 2

mov bh,0

mov dl,14; 指定列数

mov dh,10 ;指定行数

int 10h ;;;置光标的位置

mov ah,09h

lea dx,_r_q_str2

int 21h

pop dx

pop bx

pop ax

ret

output_r_q endp

;*******************************************************************************

*****

;*检查游戏是否失败的子程序,

*

;传入的参数:dx是小球的y坐标值,还用到了定义的变量 _bar_posx(小条左上角的x坐

标值) *

;返回的参数:ax 如果游戏失败ax赋值1,否则ax赋值0 *

; 这个子程序就是检查一下,在小球的运动在最低端时,小球和小条是否可以同时被某一垂

直线*

;同时穿过,如果可以,则ax=1,如果不可以ax=0 *

;注:当(cx)+3>=_bar_posx且(cx)<=_bar_posx+39时,游戏就还没失败,否则就失败了 *

;*******************************************************************************

*****

check_game_fail proc near

;保护数据

push cx

push bx

mov ax,0 ;游戏没有失败,ax中就存0

cmp dx, 128; 小球的左上角的y坐标值是128时才需要检查

jne check_game_fail_end; 不等就直接跳到结尾处

add cx,3

cmp cx,_bar_posx

jb check_game_fail_1; cx=cx+3,若cx<_bar_pos,则游戏失败

sub cx,3

mov bx,_bar_posx

add bx,39

cmp cx,bx

ja check_game_fail_1;(cx)>_bar_posx+39 时游戏失败

jmp check_game_fail_end ; 运行到这一句说明游戏没有失败

check_game_fail_1:

mov ax,1 ;游戏失败,就给ax赋值1

check_game_fail_end:

pop bx

pop cx

ret

check_game_fail endp

;*******************************************************************************

*****

;* 清除方框内的内容子程序

FLASH游戏之贪吃蛇游戏源代码

scorecommand("allowscale", "false"); fscommand("showmenu", "false"); loadedbytes=0; total=_root.getBytesTotal(); loadedbytes=_root.getBytesLoaded() if (loadedbytes==total){nextScene();} else{bfb=int((loadedbytes/total*100))+"%";} stop(); fscommand("allowscale", "false"); fscommand("showmenu", "false"); music=new Sound() music.attachSound("music"); music.stop() music.start(0,10000) musicstart=true onClipEvent(keyDown){ temp=Key.getCode(); if(!keyon){;} else if(game=="stop" and (temp==189 or temp==109)){ if (speed>1) { speed--; rate = speed;}} else if (game=="stop" and (temp==107 or temp==187)) { if (speed"start"){enter(); }else if(temp==Key.ENTER){ enter(); }else if (temp == Key.DOWN and y1>=0) { x1=0; y1 = 1; walk(); timestart() }else if (temp == Key.UP and y1<=0) { x1=0; y1 = -1; walk(); timestart() }else if (temp == Key.LEFT and x1<=0) {

用java编写的贪吃蛇游戏代码

用Java编写的贪吃蛇代码 下面是我用java编写的一个贪吃蛇游戏源代码.我个人是比较喜欢玩游戏的,所以学习编程二年多了,很想做个游戏程序,由于能力有限,一直没能做好,后来突然看同学在手机上玩“贪吃蛇”,故想做出来,其一是因为此游戏界面容易设计,算法也比较简单,今天我就把我程序的代码和算法介绍一下,顺便把程序界面皮肤设计说一下...... 程序中一个关于游戏信息的类如下,由于类的说明在程序中写的很清楚了,就不再多解释了:#include "time.h" //方向定义 const CPoint UP(CPoint(0,-1)); const CPoint DOWN(CPoint(0,1)); const CPoint LEFT(CPoint(-1,0)); const CPoint RIGHT(CPoint(1,0)); //速度快慢定义 const int HIGH = 75; const int NORMAL = 180; const int SLOW = 300; const int MAX = 80; //表示转向数 const int LENGTH = 10; class GameMsg { public: GameMsg(void) : m_icon(0)

{ InitGame(); } void InitGame(int up = VK_UP, int down = VK_DOWN, int left = VK_LEFT, int right = VK_RIGHT) { srand((unsigned)time(NULL)); m_gameSpeed = NORMAL; m_speedNum = 2; m_snakeNum = 4; for(int i=0; i

汇编语言写的贪吃蛇小游戏源代码

DATA SEGMENT dw 0,0 snk db 1 blk db 32 food db 3 tal1 db 4 tal2 db 2 adrs db 5 len 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 1 zero db 48 writer db 'Developer: Geniusdot $' email db ': geniusdotgmail.$' 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$' DATA ENDS STACK SEGMENT stack db 200 dup(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK start: mov ax,data mov ds,ax mov ax,0 mov es,ax mov frow,10 mov fcol,6 mov dh,10 mov dl,26 mov ah,2

int 10h mov ah,9 lea dx,msg1 int 21h mov dh,11 mov dl,7 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,way int 21h mov dh,12 mov dl,20 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,msg int 21h mov ah,0 int 16h mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10h mov dh,0 mov dl,0 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,score1 int 21h mov dl,15 mov ah,2 mov bh,0 int 10h

Java五子棋游戏源代码(人机对战)

//Java编程:五子棋游戏源代码 import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; import java.io.PrintStream; import javax.swing.JComponent; import javax.swing.JPanel; /* *main方法创建了ChessFrame类的一个实例对象(cf), *并启动屏幕显示显示该实例对象。 **/ public class FiveChessAppletDemo { public static void main(String args[]){ ChessFrame cf = new ChessFrame(); cf.show(); } } /* *类ChessFrame主要功能是创建五子棋游戏主窗体和菜单**/ class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"20x15","30x20","40x30"}; private String[] strmode={"人机对弈","人人对弈"}; public static boolean iscomputer=true,checkcomputer=true; private int width,height; private ChessModel cm; private MainPanel mp; //构造五子棋游戏的主窗体 public ChessFrame() { this.setTitle("五子棋游戏"); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,"Center"); this.setResizable(false); this.addWindowListener(new ChessWindowEvent()); MapSize(20,15); JMenuBar mbar = new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu("游戏");

卡牌游戏策划案

卡牌游戏策划案 目录 一、市场分析 (3) 二、产品延伸 (3) 三、游戏版本简介 (3) 四、产品评估 (4) a) 对比三国杀ONLINE (4) b) 对比游戏王&万智牌 (4) c) 总体评估 (4) 五、游戏系统 (4) a) 玩家 (4) i. 等级 (4) ii. 等级平衡 (5) iii. 官爵 (5) iv. 游戏币 (5) v. 称号与成就 (6) b) 卡牌 (6) i. 角色卡牌: (6) ii. 辅助卡牌 (7) iii. 锦囊牌: (9) c) 游戏系统流程图 (10) d) 棋盘布局 (11) e) 游戏规则 (12) i. 游戏初始化: (12) ii. 战斗阶段: (12) iii. 判定阶段: (12) f) 游戏过程流程图 (13) 六、关于游戏界面 (14) a) 建立房间 (14)

b) 准备界面 (14) 七、游戏模式 (14) a) 常规模式 (14) b) 经典模式 (15) c) 决斗模式 (15) 八、收费模式 (15) a) 道具收费 (15) b) 商城 (15) i. 人民币商品 (15) ii. 游戏币商品 (16) 九、后续开发 (16) a) PVE系统的研发 (16) b) 新的卡牌 (16) c) 新的称号与成就 (17) d) 游戏平衡性的微调 (17) e) 新资料片 (17)

1.市场分析 游戏的乐趣其中一个重要的因素就是新鲜感,而不停的重复做一件事只会令人感到枯燥乏味。当今的多数游戏游戏越来越趋近于无限的重复(练级、刷材料、刷声望等)之中,特别是一些MMORPG枯燥的练级占用了大多数的时间,只有少数时间体现在副本开荒、PK以及与其他玩家交流上。要提要玩家享受游戏时间的比例,就必须让提供给玩家更多的新鲜感,以及提供无穷的多变性让玩家去体验,提供足够的策略深度让玩家去思考,让玩家融入于游戏之中。 对战型卡牌游戏可以满足上述要求:变化无穷的战局,多变的战术,多样的牌组可以为游戏带来很长的生命力。万智牌已经流行了多年,魅力依然不减,各种动漫游戏改编的TCG 也层出不穷。 但是以万智牌为首的实体TCG有着以下的显著局限 ·规则复杂,不易入门 ·价格昂贵,门槛高 ·普及度低,玩家群体小 而中国的三国杀在国内也有非常出色的表现。基于中国玩家目前的现状,容易上手且具备中国风特色的游戏更适合与中国大陆市场。 2.产品延伸 此游戏是经过桌游三国杀延伸而来的另外一种战斗风格的桌游ONLINE,与三国杀配套更能体现出其本身意义与价值,之后还将陆续开放新的资料片——烽火攻城战,在此资料片中您将有你的帮派,与朋友、战友并肩作战,更多战斗风格等待着您的参与。 3.游戏版本简介 ·游戏目前只支持ONLINE版本(目前预算共开发108张卡牌)。 ·战斗模式目前仅开放1V1的对战模式,之后将陆续推出2V2与3V3模式及游戏规则。·预计在ONLINE版本完全推行之后再推出新资料片——烽火攻城战。

贪吃蛇游戏实现思路及源代码

HTML5 贪吃蛇游戏实现思路及源代码 点评:游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制,下面为大家简要介绍下具体的实现,感兴趣的朋友可以参考下,希望对大家有所帮助 游戏操作说明 通过方向键控制贪吃蛇上下左右移动。贪吃蛇吃到食物之后会变长一个长度。 游戏具体实现 游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制 每个方块的移动呢? 如果观察蛇的移动,可以发现,从蛇的头部到尾部,每个方块在下一时刻的位置就是它的前一个方块在当前时刻 的位置。因此我们需要做的只是控制贪吃蛇的头部的运动。其他部分的位置都可以依次类推。 另外一个值得注意的问题是 贪吃蛇吃下食物之后,新增加的方块应该放在哪个位置。 答案就是在下一时刻,新增加的方块应该出现在当前时刻的尾部位置。 因此,在吃下食物之后应该在更新蛇的每个位置之前,增加一个方块,并且将其位置设定在当前时刻的尾部位置。 然后在当前时刻更新出了新增方块之外的所有方块的位置 index.html snake.js 复制代码代码如下: var canvas; var ctx; var timer; //measures var x_cnt = 15; var y_cnt = 15;

var unit = 48; var box_x = 0; var box_y = 0; var box_width = 15 * unit; var box_height = 15 * unit; var bound_left = box_x; var bound_right = box_x + box_width; var bound_up = box_y; var bound_down = box_y + box_height; //images var image_sprite; //objects var snake; var food; var food_x; var food_y; //functions function Role(sx, sy, sw, sh, direction, status, speed, image, flag) { this.x = sx; this.y = sy; this.w = sw; this.h = sh; this.direction = direction; this.status = status; this.speed = speed; this.image = image; this.flag = flag; } function transfer(keyCode) { switch (keyCode) { case 37: return 1; case 38: return 3; case 39: return 2; case 40: return 0; } } function addFood()

java小游戏源码

连连看java源代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组 JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮 JLabel fractionLable=new JLabel("0"); //分数标签 JButton firstButton,secondButton; //分别记录两次被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; //判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ连连看"); thisContainer = mainFrame.getContentPane(); thisContainer.setLayout(new BorderLayout()); centerPanel=new JPanel(); southPanel=new JPanel(); northPanel=new JPanel(); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(new GridLayout(6,5)); for(int cols = 0;cols < 6;cols++){ for(int rows = 0;rows < 5;rows++ ){ diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } exitButton=new JButton("退出"); exitButton.addActionListener(this); resetButton=new JButton("重列"); resetButton.addActionListener(this); newlyButton=new JButton("再来一局"); newlyButton.addActionListener(this); southPanel.add(exitButton);

纸牌游戏最全纸牌游戏集合闪退怎么解决

纸牌游戏最全纸牌游戏集合闪退怎么解决【纸牌游戏集合】闪退怎么办,【纸牌游戏集合】不能运行无法游戏等问题出现都是有一定原因的,下面口袋小编将ios和安卓版【纸牌游戏集合】中可能会出现的闪退原因列举出来,并提出一些可行性较高的解决方法。 1.游戏版本不对(IOS/安卓) 由于这款游戏比较新,一些小的游戏下载站很有可能只是匆匆下载了适合自己的安卓手机版本的游戏包就打包上传了,这种情况下你的手机和下载下来的游戏包其实是不兼容的,建议各位安卓玩家前往googlestore直接下载原版进行游戏,或者前往百度攻略&口袋巴士拇指玩等大型游戏站点根据自己的手机机型来下载合适的【纸牌游戏集合】。 2.分辨率不兼容(安卓) 如果您是新版的1080P手机或者一些和主流分辨率不太一样的手机的话那么很有可能是因为分辨率的问题,手机分辨率直接影响到游戏能否流畅运行,而【纸牌游戏集合】作为一款刚出的新游戏很有可能没有考虑到更多分辨率的兼容问题,出现这种情况只能说很遗憾,我们不得不等游戏公司更新才能解决这个问题啦。 3.系统版本过低/不符(IOS/安卓) 如果您是IOS版本IOS5或者以下以及安卓2.3.0以下版本的手机的话那么您的手机系统版本有些过低了,没有达到【纸牌游戏集合】要求的最低系统版本,如果强制运行很有可能会导致设备出现问题,建议升级系统版本之后再进行游戏。 另外如果是MIUI和FLYME用户的话出现闪退的可能性也许更高,因为定制系统存在一些FC的问题,出现这种情况建议升级您的定制系统至最新版或者下载一些防FC的rom包重新刷机。 4.杀毒软件(安卓) 虽然基本上不存在这个问题,但是一些版本老旧的杀毒软件还是会在不知名的情况下禁止一些游戏运行,请检查你的手机杀毒软件黑名单和屏蔽列表中是否出现了【纸牌游戏集合】,如果出现,那么闪退就是因为杀毒软件所致的了。 5.无google play框架(安卓) 该游戏如果想要在安卓系统上运行必须依赖google play框架,如果你的手机没有goole应用商店的话可能很多游戏都无法正常运行,建议大家在网上找一个googleplay框架安装一下然后在看看游戏能不能运行。 一般来说闪退的可能性就是这些了,除此之外因为手机系统的不稳定性等问题可能还会发生很多不同的问题,此时我们只能使用最后一招重装游戏了,建议在百度攻略&口袋巴士游戏库下载最新的【纸牌游戏集合】并重新安装。如果进行过这些措施之后还是无法正常运行的话请在留言中反应,口袋小编会尝试寻找更多的闪退解决方法,感谢各位玩家的帮助。

贪吃蛇小游戏源代码

#include #include #include #include int head=3 ,tail=0; int main() { int i,j,k=0; int zuobiao[2][80]; long start; int direction=77; int gamespeed; int timeover; int change(char qipan[20][80],int zuobiao[2][80],char direction); zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[ 1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4; /*处理棋盘*/ char qipan[20][80];//定义棋盘 for(i=0;i<20;i++) for(j=0;j<80;j++) qipan[i][j]=' ';//初始化棋盘 for(i=0;i<80;i++) qipan[0][i]='_'; for(i=0;i<20;i++) qipan[i][0]='|'; for(i=0;i<20;i++) qipan[i][79]='|'; for(i=0;i<80;i++) qipan[19][i]='_'; qipan[1][1]=qipan[1][2]=qipan[1][3]='*';//初始化蛇的位置 qipan[1][4]='#'; printf("This is a game of a SNAKE.\nGOOD LUCK TO YOU !\n"); printf("Input your game speed,please.(e.g.300)\n"); scanf("%d",&gamespeed); while(direction!='q') { system("cls"); for(i=0;i<20;i++)//打印出棋盘 for(j=0;j<80;j++) printf("%c",qipan[i][j]); timeover=1;

两副牌升级比赛规则

升级(双升)竞赛规则 升级是以扑克牌为竞赛器材,由两人组成一对与另两人组成另一对相对抗的社会体育智力竞技项目。比赛采用两副扑克牌进行。以双方得分的多少决定能否升级,以双方升级的高低决定胜负。 第一章术语定义 一、花色 扑克牌中包括四种花色,一副扑克牌每种13张。四种花色分别为:黑桃、红心、方块、梅花。 二、分 牌面为5的牌代表5分,牌面为10的牌代表10分,牌面为K的牌代表10分。两副扑克牌的总分是200分。 三、级数 从2至A的从小到大依次排列的每一个序数,包括2、3、 4、5、6、7、8、9、10、J、Q、K、A共十三个级数。 四、级牌 与庄家所打级数数字相同的所有花色的牌。例如,首副牌级牌为2,所有花色的2均为级牌。 五、主级牌 将牌花色的级牌。 六、副级牌 非将牌花色的级牌。 七、将牌(又称主牌) 包括大王、小王、主级牌、副级牌和与主级牌花色相同的所有牌张。

八、副牌 除将牌外其他花色的所有牌张。 九、上家 位于本家左方的对手。 十、下家 位于本家右方的对手。 十一、庄家 主打本方级数,拥有取原始底牌、扣底牌以及首引权利的一家。第一副牌由抢亮2成功者为庄家。若庄家获胜,由其同伴继续升级坐庄;若庄家失败,由其下家坐庄,以此类推。 十二、防家 与庄家方相对抗的防守方之一家。 第二章比赛通则 第一条洗牌与抓牌 一、洗牌和切牌 比赛开始前,须将牌均匀地洗好后放置牌桌上。第一副牌有任意一家洗牌,并由对方任意一家切牌。第二副牌以后由庄家的同伴洗牌,并由庄家的上家切牌。 二、抓牌 第一副牌由任意一家翻牌点,自他开始按逆时针方向来决定由谁先抓第一张牌。第二副牌以后由庄家先抓第一张牌。按逆时针方向依次抓,每次抓一张。 三、重洗和重抓 四家抓牌完毕,底牌张数不符时,须召请裁判员清点每家手中牌张数,若各家张数无误,则换牌重洗重抓。 第二条抢庄

贪吃蛇游戏安卓源代码

附录1.SnakeView类 package com.example.android_snake.view; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import com.example.android_snake.R; import com.example.android_snake.food.Food; import com.example.android_snake.snake.Body; import com.example.android_snake.snake.Head; import com.example.android_snake.snake.Snake; import com.example.android_snake.snake.SnakeDirection; import com.example.android_snake.stone.Stone; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.os.Handler; import android.util.DisplayMetrics; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.ViewManager; import android.view.WindowManager; import android.widget.Toast; public class SnakeView extends View { private Context context; private Bitmap headBitmap; private Bitmap bodyBitmap; private Bitmap foodBitmap; private Bitmap stoneBitmap; // 屏幕的高度和宽度 private int screenHeight; private int screenWidth; // 每个小格子的高度和宽度 private int eachHeight;

java小游戏源代码

j a v a小游戏源代码 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

Java小游戏 第一个Java文件: import class GameA_B { public static void main(String[] args) { Scanner reader=new Scanner; int area; "Game Start…………Please enter the area:(1-9)" + '\n'+"1,2,3 means easy"+'\n'+"4,5,6 means middle"+'\n'+ "7,8,9 means hard"+'\n'+"Please choose:"); area=(); switch((area-1)/3) { case 0:"You choose easy! ");break; case 1:"You choose middle! ");break; case 2:"You choose hard! ");break; } "Good Luck!"); GameProcess game1=new GameProcess(area); (); } } 第二个Java文件: import class GameProcess { int area,i,arrcount,right,midright,t; int base[]=new int[arrcount],userNum[]=new int[area],sysNum[]=new int[area]; Random random=new Random(); Scanner reader=new Scanner; GameProcess(int a) { area=a; arrcount=10; right=0; midright=0; t=0; base=new int[arrcount]; userNum=new int[area]; sysNum=new int[area]; for(int i=0;i

扫雷游戏Java源代码

扫雷游戏Java源代码 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane();

java版贪吃蛇小游戏

辅助类 Coordinate.java 复制代码 package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other.x && y == other.y) { return true; }

return false; } @Override public String toString() { return "Coordinate: [" + x + "," + y + "]"; } } 复制代码 接口Direction 复制代码 package com.nn.entity; public interface Direction { public class Dir{ public static final int UP = 1; public static final int DOWN = 2; public static final int LEFT = 3;

public static final int RIGHT = 4; } } 复制代码 实体类Snake.java 复制代码 package com.nn.entity; import java.util.ArrayList; import com.nn.entity.Direction.Dir; import com.nn.util.Coordinate; public class Snake{ //小方块x坐标 private int x; //小方块y坐标

html5实现贪吃蛇源代码

Insert title here