C言語 ロシアンルーレットについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Dai

C言語 ロシアンルーレットについて

#1

投稿記事 by Dai » 1年前

C言語での質問です。


ロシアンルーレットのルール
先攻になった方は,銃弾が1,3,5発目のいずれかに込められた(1〜6の乱数により決定)場合は「死亡」→負け
•後攻になった方は,銃弾が2,4,6発目のいずれかに込められた(1〜6の乱数により決定)場合は「死亡」→負け
•先攻/後攻は交互に引き金を引く.



先攻、後攻のソースコードはかけたのですが、ロシアンルーレットの部分が全くできないです。できれば、breakと continueや、whlie for if文などを使ってやりたいです。どなたかお願いします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語 ロシアンルーレットについて

#2

投稿記事 by みけCAT » 1年前

そのままC言語で書いてしまうと Dai さんがやることが無くなってしまい、つまらないだろうから、Python で実装してみました。
参考になれば幸いです。

コード:

import random

# 弾を入れる枠の数
numBulletSpaces = 6
# 弾を入れる枠
cylinder = [False for _ in range(numBulletSpaces)]
# 1~6の乱数で弾を入れる位置を決定する
bulletPosition = random.randint(1, numBulletSpaces)
# 決定した位置に弾を入れる
cylinder[bulletPosition - 1] = True

# プレイヤー名
players = ["1P", "2P"]
# 次に撃つプレイヤーの添字
nextPlayer = 0

for bullet in cylinder:
	if bullet:
		# 弾が入っていた場合
		print("%s: Ouch!!!!!" % players[nextPlayer])
		break
	else:
		# 空だった場合
		print("%s: Safe!" % players[nextPlayer])
	# 次のプレイヤーに交代する
	nextPlayer = (nextPlayer + 1) % len(players)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1887
登録日時: 11年前

Re: C言語 ロシアンルーレットについて

#3

投稿記事 by usao » 1年前

弾の場所が決まったならばその時点で勝敗が確定する話なので,

【弾の場所を決める → 勝敗を表示する】

だけで良いのではないか? とか思えるが,
一応それっぽく(?)途中経過を表示したいという話なのであれば,単に表示すればよいだけであろう.
すなわち,

【弾の場所を決める → 経過っぽいものを表示する → 勝敗を表示する】

として,間に表示処理を挟めばいい.

コード:

//弾の位置を決定する処理.1~6の何れかを返す.
int RandomizeBulletPos()
{	//※実際には疑似乱数でも使って実装されたい
	return 3;
}

int main(void)
{
	const char *Names[] = { "The1stMan", "The2ndMan" };  //これは単なる表示用.
	
	//(1)弾の場所を決める.
	//この時点で全てが確定するので,あとは最低限必要なのは(3)の結果表示だけであろう.
	int BulletPos_0Based = RandomizeBulletPos() - 1;  

	//(2)無駄に経過を表示したいなら,てきとーに表示する
	for( int i=0; i<BulletPos_0Based; ++i )
	{	printf( "%s : Safe\n", Names[i & 1] );	}

	//(3)結果表示.
	//この例では「誰が負けたか」を表示している
	printf( "%s, Lose", Names[BulletPos_0Based & 1] );

	return 0;
}

アバター
usao
記事: 1887
登録日時: 11年前

Re: C言語 ロシアンルーレットについて

#4

投稿記事 by usao » 1年前

おっと,うっかり (2) と (3) とで出力書式が異なっているが,まぁどうでもいいところだ.

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: C言語 ロシアンルーレットについて

#5

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「
> 先攻、後攻のソースコードはかけたのですが、

見せてください。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

“C言語何でも質問掲示板” へ戻る