根據我那差點被當掉的c++
在第一章裡面寫到:最好的程式是簡單易懂,不要太過繁雜
但也要簡化到讓人看得懂
所以我先來簡化之前的戰鬥程式
順便改一些錯誤
(抱歉,上次發文有些部份沒看清楚,導致有些前後不一....)
上次的程式碼
;mode800
*define
game
*start
bg":c;Germany_1006.jpg",13,1000;背景
ld c,":a;敵人.jpg",3,1000 ;敵人
setwindow 200,227,23,17,24,24,0,2,80,1,1,":a;frame2.jpg",178,212
lsp 1,"我方頭像.jpg",0,482 ;用lsp來放置我方頭像、血條等等
lsp 2,"我方血條.jpg",120,558
lsp 3,"敵方血條.jpg",0,0
print 1
mov %10,2000;敵人的血值
mov %11,200 ;敵人的攻擊力
mov %12,40 ;敵人的防禦力
mov %13,2000 ;我方的血值
mov %14,500 ;我方的攻擊力
mov %15,40 ;我方的防禦力
mov %16,10 ;我方藥品數量
bar 1,%10,4,4,662,32,%10,#ff4444;敵人血條
bar 2,%13,125,562,662,38,%13,#ff4444;我方血條
print 10,500
*war
目前敵方血值%10
我方血值%13
select "攻擊",*mattack,"物品",*things
;bar 99,%100,40,300,100,30,%100,#ff4444
;bar 99,150-%1,40,300,100,30,%100,#ff4444;
*mattack
我方攻擊!!
quake 3,1000
rnd2 %1,3,5 ;設 %1為傷害值,數值3-5之間
sub %10,%14
sub %10,%1
bar 1,%10,4,4,662,32,2000,#ff4444
print 7,500
敵人的血值%10
if %10<=0 goto*ydie
if %10>0 goto*yattack
end
*yattack
敵人攻擊!!
quake 3,1000
rnd2 %1,3,5;設 %1為傷害值,數值3-5之間
sub %13,%11
sub %13,%1
bar 2,%13-%11-%1,125,562,662,38,2000,#ff4444
print 7,500
我方血值%13
if %13<=0 goto*mdie
if %13>0 goto*war
end
*ydie
你贏了!!
end
*mdie
你輸了!!
end
*things
你現在有%16顆藥
select "使用",*open,"不使用",*war
*open
sub %2,1
if %13==2000 goto*nouse
if %13>=1800 goto*initial
if %13<1800 goto*add
end
*nouse
你的血值現在是2000
sub %16,1
mov %13,2000
goto*yattack
end
*initial
sub %16,1
你的血值現在是2000
mov %13,2000
goto*yattack
end
*add
sub %16,1
add %13,200
你的血值現在是%13
goto*yattack
end
這是上次的程式
中間有一段:
*open
sub %2,1
if %13==2000 goto*nouse
if %13>=1800 goto*initial
if %13<1800 goto*add
end
*nouse
你的血值現在是2000
sub %16,1
mov %13,2000
goto*yattack
end
*initial
sub %16,1
你的血值現在是2000
mov %13,2000
goto*yattack
end
*add
sub %16,1
add %13,200
你的血值現在是%13
goto*yattack
當初是怕血值超過2000
但現在我發現了一個指令可以大幅縮水這一段
intlimit 編號,最小值,最大值
可以限制一個值最大最小在哪裡
必須要放在define區
於是我把我方及敵人的血值寫成:
intlimit 10,0,2000
intlimit 13,0,2000
接下來簡化
sub %13,%11
sub %13,%1
我測試過
寫成
sub %13,%11+%1
也是可以的
還有這一段
;bar 99,%100,40,300,100,30,%100,#ff4444
;bar 99,150-%1,40,300,100,30,%100,#ff4444;
當初只是測試而忘了刪掉= =
最後說一個我當初寫錯的地方
之前bar上面我寫%10-%1-%14
這樣雖然真正血值不會被沒問題
但血條表示會有問題,表示出來的血條長度是%10-%14-%1-%14-%1
把我方攻擊改500就知道出錯了
應該是四次才把血值清完
但這樣寫兩三次就清完了
and我要說
上次有個指令沒講清楚
rnd
rnd有兩種
一種是rnd2另一種是rnd
rnd的用法是
rnd %1,19
即%1隨機為0~19
rnd2的用法是
rnd2 %1,1,10
即%1隨機為1~10
在經過修改之後
目前的程式碼應該是:
;mode800
*define
intlimit 10,0,2000
intlimit 13,0,2000
game
*start
bg":c;Germany_1006.jpg",13,1000;背景
ld c,":a;敵人.jpg",3,1000 ;敵人
setwindow 200,227,23,17,24,24,0,2,80,1,1,":a;frame2.jpg",178,212
lsp 1,"我方頭像.jpg",0,482 ;用lsp來放置我方頭像、血條等等
lsp 2,"我方血條.jpg",120,558
lsp 3,"敵方血條.jpg",0,0
print 1
mov %10,2000;敵人的血值
mov %11,200 ;敵人的攻擊力
mov %12,40 ;敵人的防禦力
mov %13,2000 ;我方的血值
mov %14,20 ;我方的攻擊力
mov %15,40 ;我方的防禦力
mov %16,10 ;我方藥品數量
bar 1,%10,4,4,662,32,2000,#ff4444;敵人血條
bar 2,%13,125,562,662,38,2000,#ff4444;我方血條
print 10,500
*war
目前敵方血值%10
我方血值%13
select "攻擊",*mattack,"物品",*things
*mattack
我方攻擊!!
quake 3,1000
rnd2 %1,3,5 ;設 %1為傷害值,數值3-5之間
sub %10,%14+%1
bar 1,%10,4,4,662,32,2000,#ff4444 ;敵人血條減少
print 7,500
敵人的血值%10
if %10<=0 goto*ydie
if %10>0 goto*yattack
end
*yattack
敵人攻擊!!
quake 3,1000
rnd2 %1,3,5;設 %1為傷害值,數值3-5之間
sub %13,%11+%1
bar 2,%13,125,562,662,38,2000,#ff4444
print 7,500
我方血值%13
if %13<=0 goto*mdie
if %13>0 goto*war
end
*ydie
你贏了!!
end
*mdie
你輸了!!
end
*things
你現在有%16顆藥
select "使用",*open,"不使用",*war
*open
sub %16,1
add %13,200
你的血值現在是%13
goto*yattack
end
(本文章編集未完)
有些地方還沒改好
= =
我先去唸書
明天代再來改
預計明天會發出另一篇教學文