人生ゲームを作っています
Posted: 2008年12月06日(土) 16:46
始めまして。C言語を使った簡単な人生ゲームを作っています。
ルールは、体力が0になったらゲームオーバーで、知力とセンスを足した「友達の数」が多いほうが最終的な勝者というものです。
プロローグやマスの詳細はまだ製作途中なので省略してあります。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
struct boad {
int g; //進む数
int t; //体力関係
int a; //知力関係
int s; //センス関係
int f; //友達関係
char c[50];//コメント
};
int p_power=100,a_power=100;
int p_intellect=0,a_intellect=0;
int p_sense=0,a_sense=0;
int p_friend=0,a_friend=0;
int p_iti=0,a_iti=0;
struct boad zinsei[15]={
{0,0,0,0,0,"スタート"},//0
{0,-5,0,0,0,"あいうえお"},//1
{2,3,2,2,0,"いうえお"},//2
{5,0,1,0,0,"うえおか"},//3
{2,0,2,1,0,"えおかき"},//4
{4,0,0,0,0,"おかきく"},//5
{0,-5,1,2,0,"かきくけ"},//6
{2,3,2,2,0,"きくけこ"},//7
{0,0,1,0,0,"くけこさ"},//8
{0,0,2,1,0,"けこさし"},//9
{0,0,0,0,0,"こさしす"},//10
{0,-5,1,2,0,"さしすせ"},//11
{2,3,2,2,0,"しすせそ"},//12
{0,0,1,0,0,"すせそた"},//13
{0,0,2,1,0,"せそたち"},//14
};
int main(void)
{
//題名
printf("人生ゲーム\n");
//プロローグ
printf("プロローグ\n\n");
長くなるので省略
sleep(1);
while(1){
int player=0,com=0,x=14;
while(p_iti<=x && com==0){
srand(time(NULL));
player=rand()%6+1;
printf("サイコロを振ります。エンターキーを押してください。\n");
while(getchar()!='\n'){}
printf("あなたがサイコロを振って、%dが出ました。\n",player);
p_iti += player;
printf("%s\n",zinsei[p_iti].c);
p_power += zinsei[p_iti].t;
printf("体力%d\n",p_power);
p_intellect += zinsei[p_iti].a;
printf("知力%d\n",p_intellect);
p_sense += zinsei[p_iti].s;
printf("センス%d\n",p_sense);
p_friend += zinsei[p_iti].f+p_intellect+p_sense;
printf("友達の数%d\n",p_friend);
p_iti +=zinsei[p_iti].g;
printf("あなたは現在%d/14マス目にいます。\n",p_iti);
printf("Aのターンです。エンターキーを押してください。");
while(getchar()!='\n'){}
player=0;
com=1;
}
while(a_iti<=x && player==0){
//改行
printf("\n\n");
com=rand()%6+1;
printf("Aがサイコロを振って%dがでました。\n",com);
a_iti += com;
a_iti += player;
printf("%s\n",zinsei[p_iti].c);
a_power += zinsei[a_iti].t;
printf("体力%d\n",a_power);
a_intellect += zinsei[a_iti].a;
printf("知力%d\n",a_intellect);
a_sense += zinsei[a_iti].s;
printf("センス%d\n",a_sense);
a_friend += zinsei[a_iti].f+p_intellect+p_sense;
printf("友達の数%d\n",a_iti);
a_iti += zinsei[a_iti].g;
printf("Aは現在%d/14にいます。\n",a_iti);
com=0;player=1;
//ゴールの判定
if(p_iti>=x){
p_iti=x;
}
else if(a_iti>=x){
a_iti=x;
}
else if(p_iti>=x&&a_iti<x){
printf("あなたが1番です。友達が10人増えました。\n Aは2番です。");
p_friend+=10;
break;}
else if(p_iti<x&&a_iti>=x){
printf("Aが1番です。友達が10人増えました。\n あなたは2番です。");
a_friend+=10;
break;}
//勝利判定
if(p_friend<a_friend){printf("Aの勝ち\n");return 0;}
else if(a_friend<p_friend){printf("プレイヤーの勝ち\n");return 0;}
}
}
return 0;
}
ここまでがんばって作りました。しかしこれでは15マス以上でゴールせず、おかしなことになってしまいます。
15マス以上でゴールする方法、そして体力が0になったらプレイヤーをゲームオーバーにする方法を教えて下さい。お願いします。
ルールは、体力が0になったらゲームオーバーで、知力とセンスを足した「友達の数」が多いほうが最終的な勝者というものです。
プロローグやマスの詳細はまだ製作途中なので省略してあります。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
struct boad {
int g; //進む数
int t; //体力関係
int a; //知力関係
int s; //センス関係
int f; //友達関係
char c[50];//コメント
};
int p_power=100,a_power=100;
int p_intellect=0,a_intellect=0;
int p_sense=0,a_sense=0;
int p_friend=0,a_friend=0;
int p_iti=0,a_iti=0;
struct boad zinsei[15]={
{0,0,0,0,0,"スタート"},//0
{0,-5,0,0,0,"あいうえお"},//1
{2,3,2,2,0,"いうえお"},//2
{5,0,1,0,0,"うえおか"},//3
{2,0,2,1,0,"えおかき"},//4
{4,0,0,0,0,"おかきく"},//5
{0,-5,1,2,0,"かきくけ"},//6
{2,3,2,2,0,"きくけこ"},//7
{0,0,1,0,0,"くけこさ"},//8
{0,0,2,1,0,"けこさし"},//9
{0,0,0,0,0,"こさしす"},//10
{0,-5,1,2,0,"さしすせ"},//11
{2,3,2,2,0,"しすせそ"},//12
{0,0,1,0,0,"すせそた"},//13
{0,0,2,1,0,"せそたち"},//14
};
int main(void)
{
//題名
printf("人生ゲーム\n");
//プロローグ
printf("プロローグ\n\n");
長くなるので省略
sleep(1);
while(1){
int player=0,com=0,x=14;
while(p_iti<=x && com==0){
srand(time(NULL));
player=rand()%6+1;
printf("サイコロを振ります。エンターキーを押してください。\n");
while(getchar()!='\n'){}
printf("あなたがサイコロを振って、%dが出ました。\n",player);
p_iti += player;
printf("%s\n",zinsei[p_iti].c);
p_power += zinsei[p_iti].t;
printf("体力%d\n",p_power);
p_intellect += zinsei[p_iti].a;
printf("知力%d\n",p_intellect);
p_sense += zinsei[p_iti].s;
printf("センス%d\n",p_sense);
p_friend += zinsei[p_iti].f+p_intellect+p_sense;
printf("友達の数%d\n",p_friend);
p_iti +=zinsei[p_iti].g;
printf("あなたは現在%d/14マス目にいます。\n",p_iti);
printf("Aのターンです。エンターキーを押してください。");
while(getchar()!='\n'){}
player=0;
com=1;
}
while(a_iti<=x && player==0){
//改行
printf("\n\n");
com=rand()%6+1;
printf("Aがサイコロを振って%dがでました。\n",com);
a_iti += com;
a_iti += player;
printf("%s\n",zinsei[p_iti].c);
a_power += zinsei[a_iti].t;
printf("体力%d\n",a_power);
a_intellect += zinsei[a_iti].a;
printf("知力%d\n",a_intellect);
a_sense += zinsei[a_iti].s;
printf("センス%d\n",a_sense);
a_friend += zinsei[a_iti].f+p_intellect+p_sense;
printf("友達の数%d\n",a_iti);
a_iti += zinsei[a_iti].g;
printf("Aは現在%d/14にいます。\n",a_iti);
com=0;player=1;
//ゴールの判定
if(p_iti>=x){
p_iti=x;
}
else if(a_iti>=x){
a_iti=x;
}
else if(p_iti>=x&&a_iti<x){
printf("あなたが1番です。友達が10人増えました。\n Aは2番です。");
p_friend+=10;
break;}
else if(p_iti<x&&a_iti>=x){
printf("Aが1番です。友達が10人増えました。\n あなたは2番です。");
a_friend+=10;
break;}
//勝利判定
if(p_friend<a_friend){printf("Aの勝ち\n");return 0;}
else if(a_friend<p_friend){printf("プレイヤーの勝ち\n");return 0;}
}
}
return 0;
}
ここまでがんばって作りました。しかしこれでは15マス以上でゴールせず、おかしなことになってしまいます。
15マス以上でゴールする方法、そして体力が0になったらプレイヤーをゲームオーバーにする方法を教えて下さい。お願いします。