★ 2003/12/12(金)
昨日のは不等号を<とかにするの忘れてました。
画面の上下左右が変なのは、ただ配列をprintしているだけだからです。後で直します。
★ 2003/12/11(木)
まー、某氏から「ランダムマップRPG作って下さい」と言われたわけで。
それのせいにするつもりはないけれど、たぶんそれを命令と思って従った方が無駄な時間を過ごさずに済む気がする。
とか言いつつ今日はもう眠いので、こっちも15分間ハッキングな感じ。以下材料とレシピ。
変数名 | 内容とか | 型とか | 備考 |
score | 得点 | int | - |
map | 地図 | int[15][15] | とりあえず広さは15x15とする。0は壁。1は平地。 |
x | 主人公のx位置 | int | - |
y | 主人公のy位置 | int | - |
m | 主人公の行動 | int | ↑1、→2、↓3、←4。0なら何もしない。(一応) |
gameover | 終了フラグ | bool | 真なら終了。 |
関数/手続き名 | 内容とか | 引数とか | 戻り値とか | 備考 |
mapcreate | マップ生成 | なし | int[15][15] | 引数はランダムの種にする予定。 |
inputwait | 入力待ち | なし | int | ユーザの入力を待ち、行動値を返す。↑1、→2、↓3、←4。0なら何もしない。(一応) |
gameovercheck | 終了チェック | int,int | bool | 引数の位置からみて、四方が壁ならTrue、それ以外ならFalseを返す。 |
# -*- coding: cp932 -*- # マップ生成関数 // とりあえず平地だけを返す def mapcreate(): r = [] for i in range(15): r.append([]) a = [] for j in range(15): a.append(1) r[i]=a return r # 入力待ち関数 // とりあえずinputで数字入れるだけ def inputwait(): a = 0 while not (1<=a<=4): a = input("1:up 2:right 3:down 4:left? ") return a # 終了判定関数 def gameovercheck(cmap,cx,cy): if (cy==0 or cmap[cx][cy-1]==0) and (cx==14 or cmap[cx+1][cy]==0) and (cy==14 or cmap[cx][cy+1]==0) and (cx==0 or cmap[cx-1][cy]==0): return True else: return False # 初期設定 map = mapcreate() x,y = 7,7 map[x][y] = 0 score = 0 gameover = False for i in range(15): print map[i] print x,y,score # メインループ while not gameover: # 入力待ち m = inputwait() # 論理的に移動、移動できなかったらループ if (m==1) and (y!=0 and (map[x][y-1]>=1)): y -= 1 elif (m==2) and (x!=14 and (map[x+1][y]>=1)): x += 1 elif (m==3) and (y!=14 and (map[x][y+1]>=1)): y += 1 elif (m==4) and (x!=0 and (map[x-1][y]>=1)): x -= 1 else: continue # 主人公の位置を壁にする map[x][y] = 0 # スコア加算 score += 10 # 画面更新 // とりあえずprintするだけ… for i in range(15): print map[i] print x,y,score # 終了判定 gameover = gameovercheck(map,x,y) # 終了処理 // pass:何もしない命令 pass
以上、動いて、終了判定して、終了するところまで。
これでランダムマップRPGにおけるゲーム性の半分くらいは完成です。
画面が縦になってるのは後で直しますが……ソースの改行ってできないのかしら。
で、なんと、Noneの反対語は存在しないんだそうです。
bool型はTrueとFalse。
types.NoneTypeという型があり、その唯一の値がNone。0ビット変数というか。NoneType型の変数は、存在していれば必ずNoneなわけ。
や、Pythonは型をそんな意識しなくてもいいんだけどさ…。
以上、15分とか言いながら2時間くらいかかりました。配列を作る方法で悩んだ。
★ 2003/12/10(水)
麻雀の点数計算プログラム。……というかスクリプトだなこれは。
# -*- coding: cp932 -*- # ↑日本語を通すために必要みたいです。 # 麻雀的切り上げ計算関数 def m_round(r): return int((r+99)/100)*100 # 点数計算関数:第3引数が真なら親、偽なら子で、デフォルトは子。 def mahjong(han,fu,oya=None): fu = int((fu+9)/10)*10 if oya: a = 6 else: a = 4 b = m_round(fu*a<<han+2) if b >= 2000 * a: if han >= 13: b = 8000 * a elif han >= 11: b = 6000 * a elif han >= 8: b = 4000 * a elif han >= 6: b = 3000 * a else: b = 2000 * a return b # ツモ時の支払分配計算関数:戻り値は配列。第2引数が真なら親、偽なら子で、デフォルトは子。 def tsumo(point,oya=None): if oya: a = m_round(point / 3) return [a,a,a] else: a = m_round(point / 2) b = m_round(point / 4) return [a,b,b] # メインルーチン h = input("han? ") f = input("fu? ") p_oya = mahjong(h,f,1) p_ko = mahjong(h,f) print p_oya,tsumo(p_oya,1) print p_ko,tsumo(p_ko)
やー……昔を思い出すなあ。いいなあこれ。
しかし半端にPascalとか触ってきた弊害として、関数内の変数にプライバシーを求めてしまう。
プログラム全体で変数名を重複させないのってけっこう難しいんじゃないかなあ。
で、Noneの反対語って何ですか。
Created by "Team CJK" ( CHINO Jun'ichi, JUEI Tomoyuki, KIRIHARA Miyahito )
home : http://www.maplecat.net/cjk/
mail : j-chino♪maplecat.net(♪をアットマークに)