地球防衛軍が作れない
Posted: 2016年8月02日(火) 00:53
地球防衛軍モドキを作る課題が出たのですが、上手く作れません。
自分の戦艦と相手の戦艦が4艦(両艦共HP100)あって、
自分が1~4番を選ぶと乱数分HPが減り、どちらかの戦艦が全滅すると終了するゲームです。
ある程度は作ってみたのですが自分の戦艦と相手の戦艦の両方にHPが0の戦艦がいると強制終了されます。
while分を抜けるだけでなく、そこで勝手に切れます。
どなたか教えてください。
ちなみに乱数はまだ習っておらず、元々用意されたものを使っているだけです。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int boat[4]={100,100,100,100}; // 地球防衛軍戦艦
int boatx[4]={100,100,100,100}; // エイリアン戦艦
/*乱数発生関数*/
/*引数 n:0~n-1までの乱数を発生する*/
int Random(int n)
{
static int first=0;
if(first==0)
{
srand((unsigned)time(NULL));
first=1;
}
return(int)(rand()/(float)RAND_MAX*n);
}
void hyouji()
{
int i;
printf("地球防衛軍戦艦\n");
printf("1番艦");
for(i=0;i<boat[0]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[0]);
putchar('\n');
printf("2番艦");
for(i=0;i<boat[1]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[1]);
putchar('\n');
printf("3番艦");
for(i=0;i<boat[2]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[2]);
putchar('\n');
printf("4番艦");
for(i=0;i<boat[3]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[3]);
putchar('\n');
putchar('\n');
printf("エイリアン戦艦\n");
printf("1番艦");
for(i=0;i<boatx[0]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[0]);
putchar('\n');
printf("2番艦");
for(i=0;i<boatx[1]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[1]);
putchar('\n');
printf("3番艦");
for(i=0;i<boatx[2]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[2]);
putchar('\n');
printf("4番艦");
for(i=0;i<boatx[3]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[3]);
putchar('\n');
putchar('\n');
}
int kougeki(int x)
{
int xx = Random(4);
boatx[x]=boatx[x]-Random(51); //自軍最大与ダメージ 50
if(boatx[x]<0)
boatx[x]=0;
boat[xx]=boat[xx]-Random(51); //敵軍最大与ダメージ 50
if(boat[xx]<0)
boat[xx]=0;
}
main()
{
int num;
printf("貴方は地球防衛軍の指揮官です。\n"); //前フリ
printf("現在、エイリアンの軍勢が地球を侵略しに接近してきました。\n");
printf("全艦に指示を出してエイリアンの軍勢を殲滅してください。\n\n");
/*地球軍が全滅*/ /*敵軍が全滅*/
while((boat[0]!=0 && boat[1]!=0 && boat[2]!=0 && boat[3]!=0) || (boatx[0]!=0 && boatx[1]!=0 && boatx[2]!=0 && boatx[3]!=0))
{
hyouji();
printf("何番船を攻撃しますか?:");
while(scanf("%d",&num),(num<1 || num>4) || (boatx[num-1]==0)) //1~4以外の場合、繰り返す
{
printf("何番船を攻撃しますか?:");
}
kougeki(num-1);
}
hyouji();
if(boatx[0]==0 && boatx[1]==0 && boatx[2]==0 && boatx[3]==0) //敵軍の戦艦が全滅
{
printf("敵戦艦を全滅させました。");
printf("貴方の勝利です!");
}
if(boat[0]==0 && boat[1]==0 && boat[2]==0 && boat[3]==0) //地球軍の戦艦が全滅
{
printf("自戦艦が全滅しました。\n");
printf("地球が侵略されました。\n\n");
}
}
自分の戦艦と相手の戦艦が4艦(両艦共HP100)あって、
自分が1~4番を選ぶと乱数分HPが減り、どちらかの戦艦が全滅すると終了するゲームです。
ある程度は作ってみたのですが自分の戦艦と相手の戦艦の両方にHPが0の戦艦がいると強制終了されます。
while分を抜けるだけでなく、そこで勝手に切れます。
どなたか教えてください。
ちなみに乱数はまだ習っておらず、元々用意されたものを使っているだけです。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int boat[4]={100,100,100,100}; // 地球防衛軍戦艦
int boatx[4]={100,100,100,100}; // エイリアン戦艦
/*乱数発生関数*/
/*引数 n:0~n-1までの乱数を発生する*/
int Random(int n)
{
static int first=0;
if(first==0)
{
srand((unsigned)time(NULL));
first=1;
}
return(int)(rand()/(float)RAND_MAX*n);
}
void hyouji()
{
int i;
printf("地球防衛軍戦艦\n");
printf("1番艦");
for(i=0;i<boat[0]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[0]);
putchar('\n');
printf("2番艦");
for(i=0;i<boat[1]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[1]);
putchar('\n');
printf("3番艦");
for(i=0;i<boat[2]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[2]);
putchar('\n');
printf("4番艦");
for(i=0;i<boat[3]/10;i++)
putchar('*');
printf("(HP:%d/100)",boat[3]);
putchar('\n');
putchar('\n');
printf("エイリアン戦艦\n");
printf("1番艦");
for(i=0;i<boatx[0]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[0]);
putchar('\n');
printf("2番艦");
for(i=0;i<boatx[1]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[1]);
putchar('\n');
printf("3番艦");
for(i=0;i<boatx[2]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[2]);
putchar('\n');
printf("4番艦");
for(i=0;i<boatx[3]/10;i++)
putchar('*');
printf("(HP:%d/100)",boatx[3]);
putchar('\n');
putchar('\n');
}
int kougeki(int x)
{
int xx = Random(4);
boatx[x]=boatx[x]-Random(51); //自軍最大与ダメージ 50
if(boatx[x]<0)
boatx[x]=0;
boat[xx]=boat[xx]-Random(51); //敵軍最大与ダメージ 50
if(boat[xx]<0)
boat[xx]=0;
}
main()
{
int num;
printf("貴方は地球防衛軍の指揮官です。\n"); //前フリ
printf("現在、エイリアンの軍勢が地球を侵略しに接近してきました。\n");
printf("全艦に指示を出してエイリアンの軍勢を殲滅してください。\n\n");
/*地球軍が全滅*/ /*敵軍が全滅*/
while((boat[0]!=0 && boat[1]!=0 && boat[2]!=0 && boat[3]!=0) || (boatx[0]!=0 && boatx[1]!=0 && boatx[2]!=0 && boatx[3]!=0))
{
hyouji();
printf("何番船を攻撃しますか?:");
while(scanf("%d",&num),(num<1 || num>4) || (boatx[num-1]==0)) //1~4以外の場合、繰り返す
{
printf("何番船を攻撃しますか?:");
}
kougeki(num-1);
}
hyouji();
if(boatx[0]==0 && boatx[1]==0 && boatx[2]==0 && boatx[3]==0) //敵軍の戦艦が全滅
{
printf("敵戦艦を全滅させました。");
printf("貴方の勝利です!");
}
if(boat[0]==0 && boat[1]==0 && boat[2]==0 && boat[3]==0) //地球軍の戦艦が全滅
{
printf("自戦艦が全滅しました。\n");
printf("地球が侵略されました。\n\n");
}
}