動作するソースコードを記述できても、それが“優れたソースコード”とは限らない。「三目並べゲーム」のソースコードを例に、プログラムの品質を高める観点を解説する。
プログラミング言語の効果的な学習方法として、簡単なゲーム開発をするというのがある。本連載はプログラミング言語・開発環境「Java」で「三目並べゲーム」を作ることを目指にし、実際のサンプルコードを交えながら解説している。プログラムのどの部分をどう改良すれば、より洗練されたソースコードにできるのか。
基本的なロジックを実装できたら、次は三目並べゲームを強化してみよう。それを通じてJavaプログラミングの知識を補強できる。次に示すソースコードは、前編「『Java』プログラミング入門 ゲーム作りで学ぶ基礎から応用まで」で紹介した三目並べゲームのソースコードから以下の点を改良している。
/* Javaの三目並べゲーム */ package com.mcnz.tictactoe; public class TicTacToe { public static void main(String[] args) { char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; var numberOfSquaresPlayed = 0; var whoseTurnItIs = 'x'; var gameEndingMessage = ""; while (numberOfSquaresPlayed < 9) { printTheBoard(board); getTheUserToSelectTheirSquare(board, whoseTurnItIs); if (theyWonTheGame(board, whoseTurnItIs)) { gameEndingMessage = "あなたの勝ちです! おめでとう!"; break; } else if (numberOfSquaresPlayed == 9) { gameEndingMessage = "引き分け! お疲れさまでした。"; } else { numberOfSquaresPlayed++; whoseTurnItIs = (whoseTurnItIs == 'x') ? 'o' : 'x'; continue; } } printTheBoard(board); System.out.println(gameEndingMessage); } private static void printTheBoard(char[] board) { System.out.printf("%n %s | %s | %s %n", board[0], board[1], board[2]); System.out.println(" - + - + - "); System.out.printf(" %s | %s | %s %n", board[3], board[4], board[5]); System.out.println(" - + - + - "); System.out.printf(" %s | %s | %s %n%n", board[6], board[7], board[8]); } private static void getTheUserToSelectTheirSquare(char[] board, char whoseTurnItIs) { do { try { System.out.printf("記号%sのプレイヤーのターンです。マスを選んでください:, whoseTurnItIs); var scanner = new java.util.Scanner(System.in); var input = scanner.nextInt(); if (Character.isDigit(board[input - 1])) { board[input - 1] = whoseTurnItIs; break; } else { System.out.println("そのマスは選択済みです。"); } } catch (Exception e) { System.out.println("入力が誤っています。正しい数値を入力してください。"); } printTheBoard(board); } while (true); } private static boolean theyWonTheGame(char[] board, char whoseTurnItIs) { return (board[0] + board[1] + board[2] == (whoseTurnItIs * 3)) // 1行目 || (board[3] + board[4] + board[5] == (whoseTurnItIs * 3)) // 2行目 || (board[6] + board[7] + board[8] == (whoseTurnItIs * 3)) // 3行目 || (board[0] + board[3] + board[6] == (whoseTurnItIs * 3)) // 1列目 || (board[1] + board[4] + board[7] == (whoseTurnItIs * 3)) // 2列目 || (board[2] + board[5] + board[8] == (whoseTurnItIs * 3)) // 3列目 || (board[0] + board[4] + board[8] == (whoseTurnItIs * 3)) // 左上から右下への斜めライン || (board[2] + board[4] + board[6] == (whoseTurnItIs * 3)); // 右上から左下への斜めライン } }
その他、以下の強化または改善を施すことも可能だ。
米国TechTargetの豊富な記事の中から、開発のノウハウや技術知識など、ITエンジニアの問題解決に役立つ情報を厳選してお届けします。
Copyright © ITmedia, Inc. All Rights Reserved.
お知らせ
米国TechTarget Inc.とInforma Techデジタル事業が業務提携したことが発表されました。TechTargetジャパンは従来どおり、アイティメディア(株)が運営を継続します。これからも日本企業のIT選定に役立つ情報を提供してまいります。
Xがアルゴリズム変更へ イーロン・マスク氏が優遇したい投稿とは?
Xは新たなアルゴリズムアップデートで「情報的かつ娯楽的」なコンテンツに重点を置いてい...
新成人が考える「人生100年時代」の大人像とは?
人生100年時代を迎え、若者たちの価値観や人生設計が大きく変化している。博報堂のシンク...
広告への苦情、2024年上半期は「4095件」 具体的な内容は……?
日本広告審査機構(JARO)は、広告に関する統計データを年2回公表している。今回は、2024...