HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1224
名無しゲームの思考について3解決


名無し

リンク

2012/12/24(Mon) 17:30:35|NO.51370

こんばんは、HSP歴3ヶ月の名無しです。
冬休みなので簡単なゲームを作ろうとしています。
http://ja.wikipedia.org/wiki/%E6%89%8B%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E9%81%8A%E3%81%B3
の数を増やす遊びです。
ユーザー側のプログラムは完成しましたが、CPU側の思考をどのようにすればいいのかか分かりません。
どうかCPU側の思考を教えて下さい。


////変数一覧////
// a=myleft,b=myright,c=cpuleft,d=cpuright,e=myselect
// error=error判別,n=分身本数,hanbetu=分身時の判別,bun=分身の制限回数,bunkai=分身をした回数
///////////////


#module
#deffunc keyput //エンターキー
do
stick key
await
until key=32
return
#deffunc difference var a ,var error//数字か超えている場合を除外 エラーを吐く
if (a="")or(2<a) {
mes "有効でありません"
keyput
cls 0
var=0
error=1
}
return
#deffunc yoko
pos ginfo_mesx,ginfo_cy-ginfo_mesy
return
#deffunc kai
mes
pos 0,
return
#deffunc han
#deffunc bunbun var e,int n,var a,var b//分身する
switch e
case 1
b=n:a=a-n
swbreak
case 2
a=n:b=b-n
swbreak
swend
return
#global
cls 0
a=1:b=1:c=1:d=1:bun=3
title "マッチ"
mes "〜ルール〜"
mes "相手の指数に自分の指数を足して5になったら相手の手を消せます"
mes "先に両手を消したほうが勝ちです"
mes "デバック"
mes "a=自分の左手":yoko:input a:kai
mes "b=自分の右手":yoko:input b:kai
mes "c=相手の左手":yoko:input c:kai
mes "d=相手の右手":yoko:input d:kai
button "start",*main
stop
*main
n=0
count=count+1
gosub *point
gosub *userinput
gosub *kanri
goto *cpu
*point
cls 0
mes ""+count+"回目"
repeat 50
mes "~"
pos ginfo_mesx+ginfo_cx,ginfo_cy-ginfo_mesy
loop
pos 0
mes "自分 左手"+a+"本 右手"+b+"本"
mes "相手 左手"+c+"本 右手"+d+"本"
mes ""
repeat 50
mes "~"
pos ginfo_mesx+ginfo_cx,ginfo_cy-ginfo_mesy
loop
return
*userinput
mes ""
pos 0
if (a=0 or b=0)and(bunkai<bun){
button "分身",*bunshin
}
button "end",*owari
mes "自分の手を入力してください(左手を入力するときは1,右手は2)"
input e
keyput
difference e,error
if error=1{
error=0
gosub *point
goto *userinput
}
mes "相手の手を入力してください(左手を入力するときは1,右手は2)"
input f
keyput
difference f,error
if error=1{
error=0
gosub *point
goto *userinput
}
return
*kanri
if ((e=1)and(c=5))or((e=2)and(d=5)){
mes "足りません"
}
if ((f=1)and(a=5))or((f=2)and(b=5)){
mes "もうないんですよ"}
if e=1{
if f=1{
c=abs(5-(a+c))
}else{
d=abs(5-(a+d))
}
}else{
if f=1{
c=abs(5-(b+c))
}else{
d=abs(5-(b+d))
}
}
if ((a=0)and(b=0))or((c=0)and(d=0)){
goto *winlose
}
return
*bunshin
cls 0
gosub *point
pos 0,
mes "どちらの手を移しますか"
mes "(左手/右手)(1・2)"
input e
keyput
difference e,error
if error=1{
error=0
goto *bunshin
}
switch e
case 1
hanbetu=a
swbreak
case 2
hanbetu=b
swbreak
swend
mes "いくつ移す?"
input n
keyput
if hanbetu<n or n=""{
mes "不正な値です"
keyput
n=0
goto *bunshin
}
bunbun e,n,a,b
bunkai=bunkai+1
goto *cpu
*cpu

goto*main
*winlose
if c=0{
mes "あなたの勝ちです。"
}else{
mes "あなたの負けです。"
}
stop
*owari
end



この記事に返信する


@key

リンク

2012/12/24(Mon) 22:20:17|NO.51379

オセロのCPUなど、プログラムで自動的にプレイさせるのはかなり難しいです
何時間も悩んでやっとアルゴリズムを解く場合もあります
ヒントはありません 自分で解決しましょう
悩んでもできないのであれば、自分にはまだ早いと諦めてください



GENKI

リンク

2012/12/24(Mon) 23:47:51|NO.51381

自分ならこの状況ならこうなると予想してこの数で行く!
さらにこういう場合はあれがこーなってあーなってこの数だ…ッ!
…をそのままプログラムで書けばいいだけです。

普段の実践では意識してないと思いますが、ほぼ無意識に習慣的に頭の中で先読みしたりしていると思います。
いつも自分がどんなふうに考えて結果を出しているか、意識しながら実際にゲームしてみるといいんじゃないでしょうか。
対戦相手にきいてみるのもいいでしょう。
あとはそれを紙に書きだして、フローチャート書いて、HSPに持ってくるだけです。

いつもカンでやってるんだったら乱数使ってください。…でもそんな事無いですよね?
(カンも実装可能だと思うんですがえらく難しいんで乱数で十分。)



名無しです

リンク

2012/12/27(Thu) 19:42:13|NO.51478

ありがとうございます。
新学期が始まったら先生と一緒に考えてもらえるようにします。
回答ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.