クロスワードゲームの 作り方を学ぼう/やってみよう ‐ボードゲームの動作機構‐ クロスワードゲームの 作り方を学ぼう/やってみよう ‐ボードゲームの動作機構‐ 神奈川大学 理学部 情報科学科 後藤 智範 研究室 2015/10/24
ボードゲーム 将棋、チェス、囲碁、チェッカー、オセロ、 クロスワードゲーム、その他 のように見える 全く異なったゲーム (PCで動く)ゲームを作る側から観ると、 共通点がある 2015/7/14
ボードゲームの共通点 マス目がある 縦と横のマス目の数は同じ (3) 1つのマス目に1つの駒 抽象化=モデル化する ⇒ 行列の要素 クロスワードの場合には1文字 抽象化=モデル化する (情報科学的観点) ⇒ 行列の要素 ⇒ 正方行列(K×K) ⇒ 行列の要素の定義域 2値{0, 1}、多くても3値{-1, 0, 1} 2015/7/14
盤(ボード) ⇔ 正方行列 正方行列: K × K チェッカー、オセロ: K = 8 盤(ボード) ⇔ 正方行列 正方行列: K × K チェッカー、オセロ: K = 8 チェス: K = 8, 将棋: K = 9、碁: K = 19 クロスワード:6 ≦ K≦12?? チェッカー、 オセロ、 チェス 出典: いずれも http://ja.wikipedia.org/wiki/ 2015/7/14
実例: クロスワードゲーム 文字ピッタンⒸ 2001-2007 NBGI LTD. Webで動くクロスワードゲーム を作ってみましょう ,ALL RIGHTS RESERVED.) http://www.bandainamcogames.co.jp/cs/list/mojipittan/trial/index.php ・クロスワードゲームの変形 ・ ゲーム機、PC, Webで動く Webで動くクロスワードゲーム を作ってみましょう 最初にプログラムの設計をします 2015/7/14
プログラムの設計1 盤の大きさ6文字 ⇒ K = 6、行列: 6×6 2次元配列[6][6] 盤上の文字の有無⇒ 行列要素の値で識別 2次元配列[6][6] 盤上の文字の有無⇒ 行列要素の値で識別 無い、有る ⇒ {0, 1} 盤上の文字の位置⇒2次元配列(行、列) 1 2 3 4 5 6 か さ に は ぬ れ 盤 行列(配列) 2015/7/14
プログラムの設計2 ゲームの進行 (b)対戦者が入力する毎に(単語の)文字総数をカウント (a) array[行][列]単語(1文字)を盤のマス目に入れる 条件: 単語(1文字)の開始位置はマス目の文字 入力された(単語)の文字の位置([行][列])の位置の値を0⇒1にする (b)対戦者が入力する毎に(単語の)文字総数をカウント ・2つの変数を用意: pa、pb ・PAが単語を入力: pa = pa + 単語の文字数 ・PBが単語を入力: pb = pb + 単語の文字数 勝敗の判定: 残りのマス目数 + PAの総入力文字数 < PBの総入力文字数 残りのマス目数 + PBの総入力文字数 < PAの総入力文字数 2015/7/14
プログラムの設計3:シミュレーション1 PAが単語「かがくしき」を入力 pa = 0 + 5 = 5 PBが単語「しゅうしょく」を入力 2 3 4 5 6 か が く し き さ に は ぬ れ 1 2 3 4 5 6 PBが単語「しゅうしょく」を入力 pb = 0 + 6 = 6 1 2 3 4 5 6 か が く し き さ ゅ に う は よ ぬ れ 1 2 3 4 5 6 2015/7/14
プログラムの設計3:シミュレーション2 ・PAが単語「にんたい」を入力 ⇒ pa = 5 + 4 = 9 1 2 3 4 5 6 か が く し き さ ゅ に う ん は た よ ぬ い れ 1 2 3 4 5 6 ・PBが単語「がくえんさい」を入力 ⇒ pb = 6 + 6 = 12 1 2 3 4 5 6 か が く し き さ ゅ に え う ん は た よ ぬ い れ 1 2 3 4 5 6 2015/7/14
プログラムの設計3:シミュレーション3 ・PAが単語「きかんしゃ」を入力 ⇒ pa = 9 + 5 = 14 2 3 4 5 6 か が く し き さ ゅ に え う ん は た よ や ぬ い れ 1 2 3 4 5 6 ・PBが単語「くわがたむし」を入力 ⇒ pb = 12 + 6 = 18 1 2 3 4 5 6 か が く し き さ わ ゅ に え う ん た は む よ や ぬ い れ 1 2 3 4 5 6 2015/7/14
プログラムの設計3 :シミュレーション4 ・PAが単語「きり」を入力 ⇒ pa = 14 + 2 = 16 5 6 か が く し き り さ わ ゅ に え う ん た は む よ や ぬ い れ 1 2 3 4 5 6 ・PBが単語「かみ」を入力 ⇒ pb = 18 + 2 = 20 終了 1 2 3 4 5 6 か が く し き り さ わ ゅ み に え う ん た は む よ や ぬ い れ 1 2 3 4 5 6 2015/7/14
クロスワードプログラム(一部) 入力単語の位置(行、列の値)を格納しているプログラムコードの一部 2015/7/14 printf("\n残り枚数:%2d\n",Rem = count_board());/残り枚数 printf("--ターン:%d %s--\n",turn+1,i%2?"後攻":"先攻"); //ターン数 PRINTINP; while(scanf("%d %d %s",&xy,&fg,input)!=EOF){ if (!xy){break;} //テスト用 x = xy/10-1; //列 y = xy%10-1; //行 wordlen = strlen(input)/3; //文字列 store_word(&(cpos[i]),x,y,wordlen,fg,input);//格納 print_board(lowword); //ボード出力 update_score(i,input); //スコア更新 print_score(); //スコア表示 i++; turn = i/2; if (rem==0){ //残り枚数0枚なら終了 break; } 2015/7/14
Webで動くゲームの動作機構(どうなっているの) ゲームソフトウェア(プログラム)本体 + 連携機構 + Web server 連携機構: いろいろあります CGI ‐汎用プログラミング言語(C, C++) CGI ‐ ウェブスクリプト言語(PHP, Ruby) (c) Tomcat‐Java(servlet, JSP) 2015/7/14
CGI(Common Gateway Interface) 2015/7/14
入力の流れ ブラウザ(IEやFireFoxなど) URL+入力フォームのデータ WEBサーバ(Apacheなど) 標準入力+環境変数 CGIの動作機構(どうなっているの) 入力の流れ ブラウザ(IEやFireFoxなど) URL+入力フォームのデータ WEBサーバ(Apacheなど) 標準入力+環境変数 CGIプログラムを実行 2015/7/14
出力の流れ CGIプログラム 標準出力(コンソールなど) WEBサーバ(Apacheなど) CGI出力 ブラウザ(IEやFireFoxなど) 2015/7/14
情報科学科に入って何について修得できるでしょうか クロスワードゲーム: 情報科学科の科目で習得した知識で作成可能 な題材の1つ (1) ボードゲームの共通点を見つけ、モデル化する ものの見方、考え方 離散数学Ⅰ・Ⅱ、データベースシステム(2年)、オブジェクト指向プログラミング(3年) (2) ゲームの進行過程の処理手順を明確にする アルゴリズム論Ⅰ(2年)、アルゴリズム論Ⅱ(3年) (3) ゲームプログラムを設計する ソフトウエアデザイン論(3年) (4) ゲームプログラムを作る プログラミング・演習Ⅰ(1年) 、プログラミング・演習Ⅱ(2年) 情報科学実験Ⅰ(2年)、情報科学実験Ⅱ(3年) (5) Webの動作機構(CGIなど) コンピュータネットワーク(3年) 2015/7/14