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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

cでのトランプゲームについて

yamada3358
yamada3358

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1回答

0リアクション

0クリップ

432閲覧

投稿2022/09/17 05:54

編集2022/09/17 13:08

前提

プログラムの練習をするためcで10以下のカードを引いたらその数字がポイントになり、
11以上のカードを引いたらポイントを0にするトランプゲーム作成しようとしています。
ただ、途中でカードが引けなくなるというバグが発生してしまいました。

実現したいこと

  • カードの重複をなくす。
  • 52枚すべて引けるようにする。

発生している問題・エラーメッセージ

♦5
<プレイヤー1>'s points:13
There are 7 turns remaining.
Tarn is <プレイヤー2>.
Drow card?,Yes:1 No:2.
1
❤9
<プレイヤー2>'s points:17
There are 6 turn remaining.
Tarn is <プレイヤー1>
Drow card?,Yes:1 No:2.
1
1
1

該当のソースコード

c

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> int main(void) { int H[13]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int S[13]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int C[13]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int D[13]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int j,k,q,g; int d,t; char na1[10]; char na2[10]; for (j=0; j<13; j++){ H[j]=0; printf("%d",H[j]); } for (k=0; k<13; k++){ S[k]=0; printf("%d",S[k]); } for (q=0; q<13; q++){ D[q]=0; printf("%d",D[q]); } for (g=0; g<13; g++){ C[g]=0; printf("%d",D[g]); } printf("\x1b[0m"); printf("\n"); printf("Initialization complete.\n"); int s; //マーク出力用変数 int n; //数字出力用変数 int play; play=1; int pln; printf("Please input your name use 10 characters max.\n"); printf("First, enter the name of the first player.\n"); printf(" player_1's name: "); scanf("%s", &na1); printf("Next, enter the name of the second player.\n"); printf(" player_2's name: "); scanf("%s", &na2); srand(( unsigned int ) time (NULL)); int i; for (i=0; i<1; i++){ //最小値:1 取得個数:2 d=1+ rand () % 2; printf("%d\n",d); if(d==1){pln=1;} else{pln=2;} } do{ if(play=1){ printf(" Game start!\n"); if (d==1){ printf("Start with %s.\n",na1);} else {printf(" Start with %s.\n",na2);} //n1p:na1の点数 n2p:na2の点数 //hmc:場に出されたカードの枚数 //pln:プレイヤー //ter:残りターン数 int n1p; n1p=0; int n2p; n2p=0; int hmc; hmc=0; n=0; int ter=52; //mai 引く:1 引かない:2 int mai; do{ if(pln==1){printf("Tarn is "),printf("\x1b[33m"),printf("%s.",&na1);} else{printf("Tarn is "),printf("\x1b[32m"),printf("%s.",&na2);} printf("\x1b[0m"); printf("\n"); printf("Drow card?,Yes:1 No:2.\n"); scanf("%d",&mai); if(mai==1){srand(( unsigned int ) time (NULL)),hmc=hmc+1; /*if(pln==1){n1p=n1p+1;} else{n2p=n2p+1;}*/ ter = ter-1; int i; for (i=0; i<1; i++){ //最小値:1 取得個数:2 d=1+ rand () % 2; } /*int q1; srand(( unsigned int ) time (NULL)); for (q1=0; q1<1; q1++){ //最小値:1 取得個数:4 s=1+ rand () % 4; } int w; srand(( unsigned int ) time (NULL)); for (w=0; w<1; w++){ //最小値:1 取得個数:13 n=1+ rand () % 13; }*/ int kado[5][14]; int A2; srand(( unsigned int ) time (NULL)); do{ A2=0; int w; s=1+ rand ()%4; n=1+ rand()% 13; if (kado[s][n]==0){kado[s][n]=1;} else {A2=1;} }while(A2==1); if(n>10){printf("\x1b[43m");} if(s==1){printf("\x1b[31m"),printf("%s%d\n","♥ ",n);} else if(s==2){printf("\x1b[34m"),printf("%s%d\n","♠ ",n);} else if(s==3){printf("\x1b[34m"),printf("%s%d\n","♣ ",n);} else{printf("\x1b[31m"),printf("%s%d\n","♦ ",n);} printf("\x1b[0m"); if(s==1){if (H[n]==0){H[n]=H[n]+1; t=t+1;};} else if(s==2){if (S[n]==0){S[n]=S[n]+1; t=t+1; };} else if(s==3){if (C[n]==0){C[n]=C[n]+1; t=t+1; };} else {if (D[n]==0){D[n]=D[n]+1; t=t+1; };};} else{n=0;} if(n>10){printf("The score is set to 0 because of 11 or more.\n");if(pln==1){n1p=0;} else{n2p=0;};} else if(1<=n<=10||n==0){ if(pln==1){n1p=n1p+n;printf("\x1b[33m"),printf("%s",&na1),printf("\x1b[0m"),printf("'s points:%d\n",n1p);} else{n2p=n2p+n;printf("\x1b[32m"),printf("%s",&na2),printf("\x1b[0m"),printf("'s points:%d\n",n2p);};} else{printf(" \n");} if(pln==1){pln=2;}else{pln=1;} printf("There are %d turns remaining.\n",ter); }while(hmc<52); printf("Game set."); int second =5; printf("Stops for %d seconds. For tallying.\n",second); printf("-----------------------------------------\n"); sleep(second); printf("The tally is complete.(use %d seconds)\n",second); second =0; printf("\x1b[33m"),printf("%s",&na1),printf("\x1b[0m"),printf("'s score is %d\n",n1p); printf("\x1b[32m"),printf("%s",&na2),printf("\x1b[0m"),printf("player_2's score is %d\n",n2p); if(n1p>n2p){printf("\x1b[33m"),printf("%s",&na1),printf("\x1b[0m"),printf(" is win.");} else if(n1p<n2p){printf("\x1b[32m"),printf("%s",&na2),printf("\x1b[0m"),printf(" is win.");} else{printf("\x1b[34m"),printf("DRAW."); printf("\x1b[0m");} second =10; printf("--------------------------------------------\n"); sleep(second); printf("Enter 1 if you want to continue the game or 2 if you want to exit.\n"); printf("Enter___ "); scanf("%d",&play);} }while(play==1); } ### 試したこと プログラムの96行目から107行目のほうでプログラムを実行するとカードは52引けましたが、カードが重複する問題が発生しました。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jimbe

2022/09/17 10:26 編集

c でしょうか、 c# でしょうか。 teratail のコードのマークダウン内ではインデントにスペースとタブが混在しているとガタガタになりますので、どちらかに統一してインデントがちゃんと付くようにして頂くと見易くなります。 また、繰り返さない処理でも関数に分けたほうがコードの見通しが良くなります。 プレイヤー名の入力時点からバグがあります。if 文の数値の比較に == では無く = としてしまっていたりもあります。 変数の宣言・初期化等もテキトウですし、コードの質が悪く感じます。
BeatStar

2022/09/17 10:57

CとC#って別もんっすよ。
BeatStar

2022/09/17 12:42

質問は編集できるので編集してください。お願いします。
BeatStar

2022/09/17 12:47

後、多分ミスだと思うのですが、31行目辺りの『クローバーの札を表示する』の部分ですね。 この部分、D[...] じゃなくて C[...] では? (一部省略しています)

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。