• 締切済み

プログラミングに関して

多数省略しておりますが今このような双六をプログラミングしているのですが位置、所持金情報が上手く更新されず、上手くいかなくて困ってます。 どうすればいいでしょうか?教えてください。お願いします。 //メイン関数 int main(void){ printf("map説明 s:start,c:chance,$:money,!:振り出しに戻る,G:goal\n"); int position=0,money=500; do{ do_turn(position,money); }while(money<<0 || position==15); if(money<<0){ printf("gameover"); } } //イベント作成 void do_event(int position,int money) { int number; number=position; switch(number) { case 1:printf("チャンスタイム\n"); game1(money); break; case 2:printf("game2"); game2(money); break; case 3: printf("100Gを手に入れた"); money += 100; break; //マップ作成 void print_map(int position) { int i; for( i = 0; i <= position + 5; i++ ) { printf("%3d|",i); if(position==i){ printf("●|"); } else if(!(position==i)){ printf("○|"); } printf(" %c\n",event_name[i]); } return ; } void do_turn(int position,int money){ int me,go,energy; double z, R15=RAND_MAX+1; srand ((unsigned int) time(NULL)*314159265); z = rand() / R15; me = (int)(z*3) + 1; print_map(position); printf("現在の所持金:%dG\n",money); wait_enter(); printf("\nエネルギーを選んでください\n"); printf("1.ウコンの力 100G 2.ユンケル 200G\n"); scanf("%d",&energy); if(energy==1){ money-=100; if(me==1 || me==3) go=1; else if(position==14) go=1; else if(me==2) go=2; position+=go; printf("%d進みます\n",go); } else if(energy==2){ money-=200; if(me==1 || me==3) go=2; else if(position==14) go=1; else if(me==2) go=1; position+=go; printf("%d進みます\n",go); } print_map(position); do_event(position,money); printf("%d,%d",position,money); wait_enter(); system("pause"); } //ゲームを行う関数(じゃんけんゲーム) void game1(int money){ int comp,you; double r15=RAND_MAX+1; char* s[3]; s[0]="グー";s[1]="チョキ";s[2]="パー"; srand((unsigned int) time(NULL)*314159265); printf("じゃんけんをします勝てばお金が1.5倍に、負ければ半額を頂きます\n"); while(1){ comp=(int)(rand()/r15*3)+1; printf("1:グー、2:チョキ、3:パー ?..."); scanf("%d",&you); printf("あなたは%s,わたしは%s\n",s[you-1],s[comp-1]); if(you==comp)printf("あいこ"); else if((you+3-comp)%3==2){ printf("おめでとう、あなたの勝ち。お金が1.5倍になります\n"); money=money+money/2; break; } else{ printf("残念。あなたの負けです。お金は頂きます\n"); money=money/2; break; } } printf("所持金%dG\n",money); }

みんなの回答

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

関数への引数とか変数、その辺を勉強しなおすことをお勧めします。 以下のプログラムで123が出力されると思うのなら ちょっと致命傷。 void foo(int a) { a = 123; } int main(int argc, char **argv) { int a = 0; foo(a); printf("%d\n", a); return 0; }

関連するQ&A

  • 迷路作成のプログラミング

    迷路作成のプログラミングをC++で作ったのですが、エラーが出ます。 どのように直せば良いか教えてください。 エラー内容は 'randoomize': 識別子が見つかりませんでした。 16 進型定数には、少なくとも 1 桁の 16 進数が必要です。 'kbhit': 識別子が見つかりませんでした 'getch': 識別子が見つかりませんでした です、、お願いします。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define YOKO_MAX 200 #define ESC '\xlb' int n; int map[YOKO_MAX],count[YOKO_MAX]; int rr() { return rand() % 10>3; } void tate() { int i,j,k; printf("■"); for (i=0; i<n-1;i++) if(map[i]!=map[i+1] && rr()) { k=map[i+1]; count[k]=0; for(j=0; j<n; j++) if(map[j]==k) { map[j]=map[i]; count[map[i]]++; } printf(" "); } else printf("■"); printf("■\n"); } void last_tate() { int i,j,k; printf("■"); for (i=0; i<n-1;i++) { if(map[i]==map[i+1]) printf("■"); else { k=map[i+1]; for (j=0; j<n; j++) if (map[j]==k) map[j]=map[i]; printf(" ",map[i]); } } printf("■\n"); } void yoko() { int i,j; for (i=0; i<n; i++) if (count[i]>1 && rr()) { printf("■■"); for(i=0; i<n; i++) { if (count[j]==0) { count[j]=1; count[map[i]]--; map[i]=j;break; } } } else { printf("■"); } printf("■\n"); } void enter() { int i,k; k=rand() % n; for (i=0; i<n; i++) if(i==k) { printf("■"); } else { printf("■■"); } printf("■\n"); } void initialize() { int i; for (i=0; i<n; i++) { map[i]=i; count[i]=1; } randoomize(); } int main() { printf("無限に大きな迷路\n"); do { printf("\n迷路の横幅(2~200)?"); scanf("%d",&n); } while (n<2||n>=YOKO_MAX); printf("\n ESCキーを押すと止まる。\n"); initialize(); enter(); do { tate(); yoko(); } while (!kbhit()||getch()!=ESC); last_tate(); enter(); }

  • プログラミング

    ランダムの数値を入力してその数値より大きければ正解より大きいと表示して小さければ小さいと表示し正解なら正解ともだすプログラムをつくっています 正解まで何回かかったかとも表示したいと思います 上手く実行できないのでご教授ください #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,x,y; srand((unsigned int)time(NULL)); printf("%\n",i); i=rand()%100; //0以上100以下の整数を生成 y=0; printf("1以上100以下の整数を入力してください。\n"); scanf( "%d", &x ); /* 数値を入力させる */ printf("1以上100以下の整数を入力してください。\n"); y=y+1; if( x == i ) { printf("%d回目で当たりました。\n",y); printf("%d回目で当たりました。\n",y); break; /* 無限ループ */ } else{ if ( x < i ) //printf("正解より大きいです。\n"); printf("正解より大きいです。\n"); else //printf("正解より小さいです。\n"); printf("正解より小さいです。\n"); } } //return0;

  • 逆向きの数字を比較するぷろぐらむの一部

    コンピュータが任意に乱数で4ケタの数字を入力し、それを配列に 格納する。 そして、人間がその数字を逆向きに4ケタ、数字を配列に格納する。 というプログラムの一部を記載しました。 ところが、逆向きに入力してみてもうまく全て「間違いです。」 と表示されてしまいます。どこがおかしいか指摘していただきたいです。 よろしくお願いいたします。 do{ val=rand()%10; comp[0]=val; }while(comp[0]==0); for(i=1;i<4;i++) { do{ val=rand()%10; for(j=0;j<i;j++) { if(comp[j]==val) { break; } } }while(j<i); comp[i]=val; } for(i=0;i<4;i++) { printf("%d",comp[i]); } fflush(stdout); sleep(500); printf("\r入力せよ:"); scanf("%s",human); for(i=0;i<4;i++) { if(human[i]!=comp[3-i]) { ero=1; break; } } if(ero==0) { printf("正解です。\n"); seikai++; } else { printf("\a間違いです。\n"); }

  • 配列のプログラミングを作ったのですが「

    問題:10問の計算問題を解いて、以下のような成績表を表示するプログラムを作成せよ 例) 第一問 ○ 第二問 × 第三問 × ・・・ 自分が作った解答)#include<stdio.h> #include<stdlib.h> void main() { int a,b,ans,i; int seikai=0; int huseikai=0; int kaitou[10]; srand((unsigned)time(NULL)); printf("暗算\n"); for(i=0;i<10;i++); { printf("%問\n",i+1); a=rand()%10; b=rand()%10; printf("%d+%dは?\n",a,b); scanf_s("%d",&ans); if(ans==a+b) kaitou[i+1]=seikai; else kaitou[i+1]=huseikai; } for(i=0;i<10;i++) { printf("第%d問",i+1); if(kaitou[i+1]==seikai) printf("○\n",seikai); else printf("×\n",huseikai); } } のように作成したのですが、コンパイルは成功しますが思い通りの解答になりません。 どこが間違っているのか指摘してください。

  • 文字列処理関数について

    おみくじのプログラムを書きました。初めのが私のもので、次のが参考書のものなのですが、なんでわざわざ 文字列処理関数を使うのかがわかりませんでした。 教えてください!! int main() {   int r =0;   int i =0;   srand(time(NULL));   r = rand()%3+1;   for(i=0;i<2;i++){    if(r == 1)    {  printf("大吉:充実した1日\n");    }    else if(r == 2)    {  printf("小吉:充実した1日\n");    }    else    {       printf("凶:衝動買いに注意\n");    }    return 0; } ********************** ********************** main(){     int kuji;     char kekka[6];     char str[45];     srand(time(NULL));     r = rand()%3+1;     switch(kuji){     case 1:           strcpy(kekka,"大吉");         strcpy(str,"金運アップ");         break;    /*case2,3は省略します*/           default:    break; } printf("%s:%s",kekka,str); return 0; }

  • プログラミング(じゃんけんゲーム)

    C言語をしています。 そこでわからない所がありのですが、解説お願いします。 作りたいのは、乱数を使ったジャンケン5回戦で、 一番最後に、何勝何敗何引き分けかを表示させ、 2人のうちどちらが勝ったかです。 最後の何勝何敗何引き分けかを どう書いたらいいかがわかりません。 関数のひきわたしみたいな感じでするというのはわかります。 できたところまでのプログラムが、以下のようなコードです。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,c,i; printf("じゃんけんをしましょう。 (グー=1 チョキ=2 パー=3)\n"); for(i=i; i<=5; i++) { srand(time(NULL)); c = rand()%3+1; scanf("%d",&a); if(a==1 && c==1) printf("私もグー=1なので、あいこです。\n"); else if(a==1 && c==2) printf("私はチョキ=2なので、あなたの勝ちです。\n"); else if(a==1 && c==3) printf("私はパー=3なので、あなたの負けです。\n"); else if(a==2 && c==1) printf("私はグー=1なので、あなたの負けです。\n"); else if(a==2 && c==2) printf("私もチョキ=2なので、あいこです。\n"); else if(a==2 && c==3) printf("私はパー=3なので、あなたの勝ちです。\n"); else if(a==3 && c==1) printf("私はグー=1なので、あなたの勝ちです。\n"); else if(a==3 && c==2) printf("私はチョキ=2なので、あなたの負けです。\n"); else if(a==3 && c==3) printf("私もパー=3なので、あいこです。\n"); else printf("正しい手を入れてください。\n"); } return 0; }

  • じゃんけんゲームをつくったのですが・・・。

    自分でじゃんけんゲームを作ってみたのですが、他の人のソースで どういう風に組んでいるのか研究したいのでソースお願いします。 後、もっとこういう風にした方がいいとおもう所があればおねがいします。 <ソース> #include<stdio.h> #include<time.h> #include<stdlib.h> int main() { int i; int n; srand(time(NULL)); n=rand()%3; printf("じゃんけんをします,0がグーで1がチョキで2がパーです\n"); printf("じゃんけんぽい!"); scanf("%d",&i); if(i==0&&n==0){ printf("あいこです\n"); } else if(i==0&&n==1){ printf("勝ちました\n"); } else if(i==0&&n==2) { printf("負けました\n"); } if(i==1&&n==0){ printf("負けました\n"); } else if(i==1&&n==1){ printf("あいこです\n"); } else if(i==1&&n==2) { printf("勝ちました\n"); } if(i==2&&n==0){ printf("勝ちました\n"); } else if(i==2&&n==1){ printf("負けました\n"); } else if(i==2&&n==2){ printf("あいこです\n"); } if(i>2) { printf("やりなおしてください\n"); } return 0; }

  • バグが直りません

    山手線すごろくのプログラムをC言語で作ろうと思い、以下のように作りました。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> char st[][80]={"東京", "神田", "秋葉原", "御徒町", "上野", "鶯谷", "日暮里", "西日暮里", "田端", "駒込", "巣鴨", "大塚", "池袋", "目白", "高田馬場", "新大久保", "新宿", "代々木", "原宿", "渋谷", "恵比寿", "目黒", "五反田", "大崎", "品川", "田町", "浜松町", "新橋", "有楽町", "東京"}; int now=0; int dicenum=1; int pt=30; int stlength=30; int dice(void){ int dc; srand(time(NULL)); dc=rand()%6+1; return dc; } int event(void){ int eve; srand(time(NULL)); eve=rand()%9+1; return eve; } void step(void){ now++; } int turn(void){ int i, d, ev; for(i=1;i<=dicenum;i++){ d+=dice(); } printf("ダイス目は%dです。\n", d); for(i=1;i<=d;i++){ now++; printf("%s\n", st[now]); if(now==stlength){ return 1; } } ev=event(); switch(ev){ case 1: printf("プラス10pt\n"); pt+=10; break; case 2: printf("プラス20pt\n"); pt+=20; break; case 3: printf("プラス50pt\n"); pt+=50; break; case 4: printf("マイナス10pt\n"); pt-=10; break; case 5: printf("マイナス20pt\n"); pt-=20; break; case 6: printf("マイナス50pt\n"); pt-=50; break; case 7: printf("急行\n"); dicenum=2; break; case 8: printf("特急\n"); dicenum=3; break; case 9: printf("新幹線\n"); dicenum=4; break; } if(pt<=0){ return 2; }else{ return 0; } } int main(){ srand(time(NULL)); int status=0; char a; printf("鉄道すごろく(JR山手線)\n"); printf("エンターキーでスタート\n"); scanf("%c", &a); while(1){ while(getch()!='\r'){ ; } if(status==0){ printf("現在地:%s\n%dポイント\n", st[now], pt); status=turn(); }else if(status==1){ printf("ゴール!おめでとう!\n"); break; }else if(status==2){ printf("残念!ポイントがなくなりました。ゲームオーバー。\n"); break; } } return 0; } コンパイルは通ったのですが実行すると"ダイス目は1873695976です。"などとダイス目がものすごく大きな値になってしまいます。原因が全く分からないのでどなたかよろしくお願いします。

  • Cプログラミング 

    素数を判定するプログラミングの作成で以下のプログラミングを作成したのですが、すべて 素数でないとでてしまいます。どなたか間違いをおしえていただけませんでしょうか。 #include<stdio.h> int main(void) { int num,i; printf("Please input a number:"); scanf("%d",&num); for (i=2; i < num ; i++){num % i; if (num % i == 0) break; } if (num % i == 0) printf("%d is not prime. \n" ,num); else printf("%d is prime. \n" ,num); return 0; }

  • プログラミング言語Cの演習

    以下のようにプログラミングをしてコンパイルしても特にエラーは無かったのですが・・・、実行しようとするとセグメンテーション違反になってしまいます。誰か分かる方がいたら解答かアドバイス欲しいです。 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAXOP 100 #define NUMBER '0' #define MAXVAL 100 #define BUFSIZE 100 int getop(char s[]); int getch(void); void ungetch(int c); void push(double f); double pop(void); int sp = 0; double val[MAXVAL]; char buf[BUFSIZE]; int bufp = 0; main() { int type; double op2; char s[MAXOP]; while ((type = getop(s)) != EOF) { switch (type) { case NUMBER: push(atof(s)); break; case '+': push(pop() + pop()); break; case '-': op2 = pop(); push(pop() - op2); break; case '/': op2 = pop(); if (op2 != 0.0) push(pop() / op2); else printf("error: zero divisor\n"); break; case '%': op2 = pop(); if (op2 != 0.0) push(fmod(pop(), op2)); else printf("error: zero divisor\n"); break; case '\n': printf("\t%.8g\n", pop()); break; default: printf("error: unknown command %s\n", s); break; } } return 0; } int getop(char s[]) { int c, rc; float f; while ((rc = scanf("%c", &c)) != EOF) if ((s[0] = c) != ' ' && c != '\t') break; s[1] = '\0'; if (rc == EOF) return EOF; else if (!isdigit(c) && c != '.') return c; ungetc(c, stdin); scanf("%f", &f); sprintf(s, "%f", f); return NUMBER; } void push(double f) { if (sp < MAXVAL) val[sp++] = f; else printf("error: stack full, can't push %g\n", f); } double pop(void) { if (sp > 0) return val[--sp]; else { printf("error: stack empty\n"); return 0.0; } } int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if (bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }

専門家に質問してみよう