當前位置:首頁 » 游戲種類 » 字元串小游戲

字元串小游戲

發布時間: 2023-06-30 04:18:28

『壹』 求用匯編語言編寫的小游戲代碼

code
segment
assume
cs:code,
ds:code
org
100h
start:
push
0b800h
pop
es
push
cs
pop
ds
mov
cx,
0fffh
;========清屏
rep
stosw
drawfen:
;========分數標簽
lea
si,
fen
mov
di,
160+10
call
print
sub
di,
4
mov
[fi],
di
;label
cursor
drawfoot:
;========擺放食物
mov
di,
160+40
mov
ax,
0a05h
mov
cl,
8
drf:
add
di,
160*2+90
stosw
loop
drf
drawqian:
;========繪制牆壁
xor
di,
di
mov
cl,
80
mov
ax,
0c1fh
repnz
stosw
mov
di,
160*24
mov
cl,
80
mov
ax,
0c1eh
repnz
stosw
xor
di,
di
mov
cl,
24
mov
ax,
0c10h
q1:
mov
es:[di],
ax
add
di,
160
loop
q1
mov
di,
158
mov
cl,
24
mov
ax,
0c11h
q2:
mov
es:[di],
ax
add
di,
160
loop
q2
;============================初始化蛇的數據
inits:
mov
bp,
0
;bp=方向,
ch=節數,
[snake+_newxy]=xy坐標
mov
ch,
3
mov
word
ptr[snake+_newxy],
_center
mainl:
;游戲開始
call
movsnake
call
operkey
jmp
short
mainl
exit:
lea
si,
over
mov
di,
_center
call
print
int
20h
;結束
;===========================移動頭
movsnake:
lea
si,
snake
mov
bx,
word
ptr[si+_newxy]
;get
currentxy
push
bx
add
bx,
word
ptr[dir+bp]
;add
offsetxy
mov
ax,
es:[bx]
cmp
al,
01h
;撞到自己的身體
je
exit
cmp
al,
10h
;撞到牆
je
exit
cmp
al,
11h
;撞到牆
je
exit
cmp
al,
1eh
;撞到牆
je
exit
cmp
al,
1fh
;撞到牆
je
exit
cmp
al,
05h
;吃食物
jne
mgo
call
eat
mgo:
mov
word
ptr[si+_newxy],bx
;update
mov
word
ptr
es:[bx],
0e02h
;drawhead
('_')
pop
bx
mov
word
ptr[si+_oldxy],
bx
;save
oldxy
add
si,
_len
;==============移動並繪制身體
mov
cl,
ch
dec
cl
jz
mb
mlin:
push
word
ptr[si+_newxy]
;save
currentxy
mov
di,
word
ptr[si-_len+_oldxy]
;get
prev.oldxy
mov
word
ptr[si+_newxy],
di
;update
currentxy
mov
ax,
1e01h
;draw
body
stosw
pop
word
ptr[si+_oldxy]
;save
oldxy
add
si,
_len
;get
next
dec
cl
jnz
mlin
mov
di,
word
ptr[si-_len+_oldxy]
;erase
the
last!
xor
ax,
ax
stosw
mb:
ret
;=======================吃食物
eat:
inc
ch
;
jns
v0
jmp
exit
v0:
mov
word
ptr
es:[bx],
0
;erase
it
mov
di,
bx
add
di,
90
cmp
di,
0f00h
jb
v2
mov
di,
dx
and
di,
0f00h
v2:mov
word
ptr
es:[di],
0a05h
mov
di,
word
ptr
[fi]
;只能顯示到99
cmp
byte
ptr
es:[di],'9'
jb
v1
mov
byte
ptr
es:[di],
'0'
sub
di,
2
v1:
inc
byte
ptr
es:[di]
ret
;=====================顯示字元串
print:
mov
ah,
0dh
sa:
lodsb
stosw
cmp
al,
0
jnz
sa
ret
;=====================鍵盤操縱區
operkey:
;the
operator
key
for
game
push
bx
cx
mov
ah,
0
int
1ah
add
dx,
4
mov
bx,
dx
wt:
int
1ah
cmp
dx,
bx
jb
wt
pop
cx
bx
in
al,
60h
k0:
cmp
al,
left
jne
k1
mov
bp,
0
k1:
cmp
al,
right
jne
k2
mov
bp,
2
k2:
cmp
al,
up
jne
k3
mov
bp,
4
k3:
cmp
al,
down
jne
k4
mov
bp,
6
k4:
cmp
al,
escape
jne
retk
jmp
exit
retk:
ret
;========================數據區
over
db
'game
over',
0
fen
db
'score=000',
0
fi
dw
?
dir
dw
-2,
+2,
-160,
+160
_center
equ
160*12+60
_newxy
equ
0
_oldxy
equ
2
_len
equ
4
left
equ
75
right
equ
77
up
equ
72
down
equ
80
escape
equ
1
snake:
code
ends
end
start

『貳』 教你如何使用C語言編寫簡單小游戲

編寫程序,實現如下表所示的5-魔方陣。
17

24

1

8

15

23

5

7

14

16

4

6

13

20

22

10

12

19

21

3

11

18

25

2

9

5-魔方陣
問題分析
所謂「n-魔方陣」,指的是使用1〜n2共n2個自然數排列成一個n×n的方陣,其中n為奇數;該方陣的每行、每列及對角線元素之和都相等,並為一個只與n有關的常數,該常數為n×(n2+1)/2。
例如5-魔方陣,其第一行、第一列及主對角線上各元素之和如下:
第一行元素之和:17+24+1+8+15=65
第一列元素之和:17+23+4+10+11=65
主對角線上元素之和:17+5+13+21+9=65

n×(n2+1)/2=5×(52+1)/2=65
可以驗證,5-魔方陣中其餘各行、各列及副對角線上的元素之和也都為65。
假定陣列的行列下標都從0開始,則魔方陣的生成方法為:在第0行中間置1,對從2開始的其餘n2-1個數依次按下列規則存放:
(1)
假定當前數的下標為(i,j),則下一個數的放置位置為當前位置的右上方,即下標為(i-1,j+1)的位置。
(2)
如果當前數在第0行,即i-1小於0,則將下一個數放在最後一行的下一列上,即下標為(n-1,j+1)的位置。
(3)
如果當前數在最後一列上,即j+1大於n-1,則將下一個數放在上一行的第一列上,即下標為(i-1,0)的位置。
(4)
如果當前數是n的倍數,則將下一個數直接放在當前位置的正下方,即下標為(i+1,j)的位置。
演算法設計
在設計演算法時釆用了下面一些方法:
定義array()函數,array()函數的根據輸入的n值,生成並顯示一個魔方陣,當發現n不是奇數時,就加1使之成為奇數。
使用動態內存分配與釋放函數malloc()與free(),在程序執行過程中動態分配與釋放內存,這樣做的好處是使代碼具有通用性,同時提高內存的使用率。
在分配內存時還要注意,由於一個整型數要佔用兩個內存,因此,如果魔方陣中要存放的數有max個,則分配內存時要分配2*max個單元,從而有malloc(max+max)。在malloc()函數中使用max+max而不是2*max是考慮了程序運行的性能。
顯然應該使用二維數組來表示魔方陣,但雖然數組是二維形式的,而由於內存是一維線性的,因此在存取數組元素時,要將雙下標轉換為單個索引編號。在程序中直接定義了指針變數來指向數組空間,即使用malloc()函數分配的內存。

熱點內容
絕地求生未來之役比賽為什麼進不去 發布:2023-08-31 22:07:08 瀏覽:1239
dota2位置什麼意思 發布:2023-08-31 22:00:04 瀏覽:682
lol電競是什麼樣子 發布:2023-08-31 21:58:40 瀏覽:1137
絕地求生八倍鏡的那個圓圈怎麼弄 發布:2023-08-31 21:58:31 瀏覽:1190
lol龍龜一個多少金幣 發布:2023-08-31 21:55:07 瀏覽:587
王者如何改游戲內名稱 發布:2023-08-31 21:55:06 瀏覽:877
游戲主播打廣告是什麼意思 發布:2023-08-31 21:55:06 瀏覽:1531
絕地求生如何免費拿到ss7賽季手冊 發布:2023-08-31 21:52:13 瀏覽:754
pgg是哪個國家的戰隊lol 發布:2023-08-31 21:52:07 瀏覽:636
一個人的時候才發現游戲很沒意思 發布:2023-08-31 21:49:24 瀏覽:1235