質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

4436閲覧

オセロの自分のターン

sobue

総合スコア329

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/03/26 00:39

編集2016/03/26 00:43

お世話になっております。
オセロ自分のターンを管理する方法で悩んでいます。
リバースできた回数とリバースできなかった回数で奇数、偶数でもいいとは思うのですが他に応用が利かないため他にないかと思っております。
何かいい方法がありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

単純にプレイヤーが移り変わる旅に、int型の変数(下記の例ではplayerChangeCounter)をインクリメントしていったらいいのではないでしょうか。

下記のようにして、PLAYER_COUNTにきちんとゲームの人数さえ入れてあげれば、そのゲームが何人で行うゲームであっても、今何ターン目で、誰の番か、何手順目かといった情報を全て管理できます。
3人麻雀、4人麻雀、もっと大人数で行うターン制のカードゲームなどでも、そのまま使えます。

Java

1/** 2 * プレイヤーの人数(オセロ、チェス、将棋などは2、四人麻雀は4、三麻は3) 3 */ 4private static final int PLAYER_COUNT = 2; 5/** 6 * ターン管理用変数 7 * 初期値を0とする。コマを置いた回数(麻雀牌を引いた回数)が入る。 8 */ 9private int playerChangeCounter = 0; 10 11private void changePlayer() { 12 playerChangeCounter++; 13 14 /* 15 * 今何ターン目かを表すturn変数 16 * 例:オセロの場合、 17 * playerChangeCounterが 0と1は1ターン目、2と3は2ターン目、4と5は3ターン目となる。 18 */ 19 int turn = (playerChangeCounter / PLAYER_COUNT) + 1; 20 21 /* 22 * 今、何番手のプレイヤーかを表す変数 23 * 例:オセロの場合、 24 * playerChangeCounterが 0, 2, 4...は1番目のプレイヤー(先攻) 25 * 1, 3, 5...は2番目のプレイヤー(後攻)ができる 26 */ 27 int player = (playerChangeCounter % PLAYER_COUNT) + 1; 28 String strPlayer = player==0 ? "先攻" : "後攻" 29 30 system.out.println("今" + turn + "ターン目で、" + strPlayer + "のプレイヤーの番です。"); 31} 32

投稿2016/03/26 02:47

編集2016/03/26 02:50
Odacchi

総合スコア907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sobue

2016/03/26 10:17

やりたいことをズバリ掲載ありがとうございます。
guest

0

提示する案は2つあります.

1.ターン管理変数を使って
何ターン目,みたいな管理はするんじゃないですか?
そしたらそのターンカウンタを2で割った余りを使って,
1ターン目/2→余り1→自分
2ターン目/2→余り0→相手
3ターン目/2→余り1→自分

とする.

これ,結構自分では使ってて,制御ループのウチ,制御ループカウンタが
5の倍数の時は画面更新,
10の倍数の時はログファイル保存
とかやってます(5で割った余りが0,10で割った余りが0).

2.フリップフロップ変数を用いる
使い古されたターン管理ですけど,

turn = 1 - turn

初期値がturn = 0

処理が終わったら前述のコードを実行,するとturnは1-0で1に,
次の処理が終わったら前述のコードを実行,するとturnは1-1=0に…

これ,ポケコン(電卓にBASIC言語が乗っているすごいやつ)時代に見かけて,なんぞこれー!と思ったコードで,今でも愛用しています.

参考になれば.

投稿2016/03/26 01:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sobue

2016/03/26 02:07

ポケコンは高校生の時僕も使ってたんですがプログラムはしてなかったので・・・・ そんな考え方があるのか〜。すごいですね!
guest

0

自分のターンが分かれば良いと言う事でしたら、
ターン管理用の変数に1:自分のターン、-1:相手のターンと定義して
ターン交代のタイミングで、ターン管理用の変数に-1をかけるで良いのでは?

またオセロぐらいなら、検索するとソースプログラムが色々引っかかりますので
他の方はどうしているか、参考に見てみたらどうでしょうか。

投稿2016/03/26 01:15

cry_4_the_moon

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sobue

2016/03/26 01:31

マイナスを管理対象とするのですね。新しい発見です。ありがとうございます
guest

0

石を置く→ターンが代わる でいいのでは?
おける場所がない場合もターン交代で。

投稿2016/03/26 00:55

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sobue

2016/03/26 01:26 編集

やっぱりそれぐらいしかないですよね?でもそれが一番シンプルか〜
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問