练习3-1
/****************************************************************
* 练习3-1
* 函数分割 针对猜拳
* 分为五个部分:
* 1、初始处理 2、读/生成手势 3、更新对局信息
* 4、显示判断结果 5、确认是否再次挑战
* 合并3、4模块
/****************************************************************/
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int player;
int computer;
int win_num;//赢的次数
int lose_num;//输的次数
int draw_num;//平局次数
char *hd[] = { "石头","剪刀","布" };
//1、状态初始化
void initialize(void)
{
win_num = 0;
lose_num = 0;
draw_num = 0;
srand((int)time(NULL));
printf("猜拳游戏开始!!!\n");
}
//2、读取、生成手势
void read_create(void)
{
int i;
computer = rand() % 3;
do
{
printf("\n\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
}
/*
//3、更新对局信息 胜负次数
void count_num(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
}
//4、显示判断结果
void disp_result(int result)
{
switch (result)
{
case 0:puts("平局"); break;
case 1:puts("你输了"); break;
case 2:puts("你赢了"); break;
}
}
*/
void renew_disp(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
switch (result)
{
case 0:puts("平局"); break;
case 1:puts("你输了"); break;
case 2:puts("你赢了"); break;
}
}
//5、确认是是否再次挑战
int confirm_retry(void)
{
int x;
printf("再来一次吗?---(0)否 (1)是");
scanf_s("%d", &x);
return x;
}
//主函数
int main(int arg, int argv[])
{
int judge;//判断结果数
int retry;//判断是否重新开始
initialize();
do
{
read_create();
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
judge = (player - computer + 3) % 3;
renew_disp(judge);
//count_num(judge);
//disp_result(judge);
retry = confirm_retry();
} while (retry == 1);
printf("%d胜;%d负;%d平。\n", win_num, lose_num, draw_num);
return 0;
}
练习3-2
/****************************************************************
* 练习3-2
* 函数分割 针对猜拳
* 分为五个部分:
* 1、初始处理 2、读/生成手势 3、更新对局信息
* 4、显示判断结果 5、先赢满n局者胜
/****************************************************************/
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int again_num;//猜赢的次数
int player;
int computer;
int win_num;//赢的次数
int lose_num;//输的次数
int draw_num;//平局次数
char *hd[] = { "石头","剪刀","布" };
//1、状态初始化
void initialize(void)
{
win_num = 0;
lose_num = 0;
draw_num = 0;
srand((int)time(NULL));
printf("猜拳游戏开始!!!\n");
}
//2、读取、生成手势
void read_create(void)
{
int i;
computer = rand() % 3;
do
{
printf("\n\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
}
//3、更新对局信息 胜负次数
void count_num(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
}
//4、显示判断结果
void disp_result(int result)
{
switch (result)
{
case 0:puts("平局"); break;
case 1:puts("你输了"); break;
case 2:puts("你赢了"); break;
}
}
//5、补充函数 需要猜赢n次
void again_fun()
{
printf("需要猜赢几次:");
scanf_s("%d",&again_num);
}
//主函数
int main(int arg, int argv[])
{
int judge;//判断结果数
int retry;//判断是否重新开始
initialize();
again_fun();
do
{
read_create();
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge);
} while (lose_num < again_num && win_num < again_num);
printf(win_num == again_num ? "\n你赢了\n" : "\n你输了\n");//注意printf的用法
printf("%d胜;%d负;%d平。\n", win_num, lose_num, draw_num);
return 0;
}
练习3-3
/****************************************************************
* 练习3-3
* 函数分割 针对猜拳
* 分为五个部分:
* 1、初始处理 2、读/生成手势 3、更新对局信息
* 4、显示判断结果 5、先赢满n局者胜
* 并且只让电脑只能出石头和布
/****************************************************************/
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int again_num;//猜赢的次数
int player;
int computer;
int win_num;//赢的次数
int lose_num;//输的次数
int draw_num;//平局次数
//想让电脑只出石头和布,这里需要进行调整hd[]中的次序
char *hd[] = { "石头","布","剪刀" };
//1、状态初始化
void initialize(void)
{
win_num = 0;
lose_num = 0;
draw_num = 0;
srand((int)time(NULL));
printf("猜拳游戏开始!!!\n");
}
//2、读取、生成手势
void read_create(void)
{
int i;
computer = rand() % 2;//这里限定电脑随机数只在0-1之间
do
{
printf("\n\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
}
//3、更新对局信息 胜负次数
void count_num(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
}
//4、显示判断结果
void disp_result(int result)
{
switch (result)
{
case 0:puts("平局"); break;
case 1:puts("你赢了"); break;//这里也需要进行调整result为1时赢
case 2:puts("你输了"); break;
}
}
//5、补充函数 需要猜赢n次
void again_fun()
{
printf("需要猜赢几次:");
scanf_s("%d", &again_num);
}
//主函数
int main(int arg, int argv[])
{
int judge;//判断结果数
int retry;//判断是否重新开始
initialize();
again_fun();
do
{
read_create();
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge);
} while (lose_num < again_num && win_num < again_num);
printf(win_num == again_num ? "\n你赢了\n" : "\n你输了\n");//注意printf的用法
printf("%d胜;%d负;%d平。\n", win_num, lose_num, draw_num);
return 0;
}
练习3-4
/****************************************************************
* 练习3-4
* 函数分割 针对猜拳
* 分为五个部分:
* 1、初始处理 2、读/生成手势 3、更新对局信息
* 4、显示判断结果 5、先赢满n局者胜
/****************************************************************/
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int again_num;//猜赢的次数
int player;
int computer;
int win_num;//赢的次数
int lose_num;//输的次数
int draw_num;//平局次数
char *hd[] = { "石头","剪刀","布" };
int sig_computer=0;//设置一个控制信号,让其电脑第一次为0
//1、状态初始化
void initialize(void)
{
win_num = 0;
lose_num = 0;
draw_num = 0;
srand((int)time(NULL));
printf("猜拳游戏开始!!!\n");
}
//2、读取、生成手势
void read_create(void)
{
int i;
//两种情况控制电脑第一次出石头
if (sig_computer==0)
{
computer = 0;
}
else
{
computer = rand() % 3;
}
do
{
printf("\n\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
}
//3、更新对局信息 胜负次数
void count_num(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
}
//4、显示判断结果
void disp_result(int result)
{
switch (result)
{
case 0:puts("平局"); break;
case 1:puts("你输了"); break;
case 2:puts("你赢了"); break;
}
}
//5、补充函数 需要猜赢n次
void again_fun()
{
printf("需要猜赢几次:");
scanf_s("%d",&again_num);
}
//主函数
int main(int arg, int argv[])
{
int judge;//判断结果数
int retry;//判断是否重新开始
initialize();
again_fun();
do
{
read_create();
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge);
sig_computer = 1;
} while (lose_num < again_num && win_num < again_num);
printf(win_num == again_num ? "\n你赢了\n" : "\n你输了\n");//注意printf的用法
printf("%d胜;%d负;%d平。\n", win_num, lose_num, draw_num);
return 0;
}
练习3-5
/****************************************************************
* 练习3-5
* 1、初始处理 2、读/生成手势 3、更新对局信息
* 4、显示判断结果 5、需要猜赢n次
* 模式选择、计算机每五次后出一次
/****************************************************************/
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int mode;
int game_num=1;//游戏进行次数
int again_num;//猜赢的次数
int player;
int computer;
int win_num;//赢的次数
int lose_num;//输的次数
int draw_num;//平局次数
int signal=0;//控制五次计算机不后出
char *hd[] = { "石头","剪刀","布" };
//1、状态初始化、选择游戏模式
void initialize(void)
{
win_num = 0;
lose_num = 0;
draw_num = 0;
srand((int)time(NULL));
printf("猜拳游戏开始!!!\n");
do
{
printf("请选择游戏模式(0---练习模式,1---挑战模式):");
scanf_s("%d", &mode);
} while (mode<0&&mode>1);//要求输入0或者1
}
//2、读取、生成手势 每五次就后出一次
void read_create(int signal)
{
int i;
//signal==0时正常随机
//signal==1时计算机后出
if (signal==0) {
computer = rand() % 3;
do
{
printf("\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
}
else//计算机每五次后出一次
{
do
{
printf("\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
computer = (player + 2) % 3;
}
}
//3、更新对局信息 胜负次数
void count_num(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
}
//4、显示判断结果
void disp_result(int result)
{
switch (result)
{
case 0:puts("平局"); break;
case 1:puts("你输了"); break;
case 2:puts("你赢了"); break;
}
}
//5、补充函数 需要猜赢n次
void again_fun()
{
printf("需要猜赢几次:");
scanf_s("%d",&again_num);
}
//主函数
int main(int arg, int argv[])
{
int judge;//判断结果数
int retry;//判断是否重新开始
initialize();
if (mode == 0)//玩家可以自愿执行是否重新开始
{
do
{
printf("\n这是第%d回合", game_num);
//判断是否为5的倍数,若为5的倍数,则计算机后出
if (game_num % 5 == 0)
{
signal = 1;
}
else
{
signal = 0;
}
read_create(signal);
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge);
game_num++;
printf("是否继续游戏(0--exit,1---continue):");
scanf_s("%d", &retry);
} while(retry==1);
}
else//猜赢几次就退出游戏
{
again_fun();
do
{
printf("\n这是第%d回合", game_num);
//判断是否为5的倍数,若为5的倍数,则计算机后出
if (game_num % 5 == 0)
{
signal = 1;
}
else
{
signal = 0;
}
read_create(signal);
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge);
game_num++;
} while (lose_num < again_num && win_num < again_num);
printf(win_num == again_num ? "\n你赢了\n" : "\n你输了\n");//注意printf的用法
}
printf("%d胜;%d负;%d平。\n", win_num, lose_num, draw_num);
return 0;
}
练习3-6
/****************************************************************
* 练习3-6
* 1、初始处理 2、读/生成手势 3、更新对局信息
* 4、显示判断结果 5、需要猜赢n次
* 模式选择(两种)
* 并保存所有记录
/****************************************************************/
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int mode;
int game_num = 1;//游戏进行次数
int again_num;//猜赢的次数
int player;
int computer;
int win_num;//赢的次数
int lose_num;//输的次数
int draw_num;//平局次数
char *hd[] = { "石头","剪刀","布" };
char *player_hd[100];//保存玩家每次的手势
char *computer_hd[100];//保存计算机每次的手势
char *result[100];//保存每次输赢的结果
//1、状态初始化、选择游戏模式
void initialize(void)
{
win_num = 0;
lose_num = 0;
draw_num = 0;
srand((int)time(NULL));
printf("猜拳游戏开始!!!\n");
do
{
printf("请选择游戏模式(0---练习模式,1---挑战模式):");
scanf_s("%d", &mode);
} while (mode < 0 && mode>1);//要求输入0或者1
}
//2、读取、生成手势
void read_create( )
{
int i;
computer = rand() % 3;
do
{
printf("\n石头剪刀布....");
for (i = 0; i < 3; i++)
{
printf("(%d)%s ", i, hd[i]);
}
putchar(':');
scanf_s("%d", &player);
} while (player < 0 || player>2);
}
//3、更新对局信息 胜负次数
void count_num(int result)
{
switch (result)
{
case 0:draw_num++; break;
case 1: lose_num++; break;
case 2: win_num++; break;
}
}
//4、显示判断结果
void disp_result(int res,int i)
{
switch (res)
{
case 0:puts("平局"); result[i] = "平局"; break;
case 1:puts("你输了"); result[i] = "玩家输"; break;
case 2:puts("你赢了"); result[i] = "玩家赢"; break;
}
}
//5、补充函数 需要猜赢n次
void again_fun()
{
printf("需要猜赢几次:");
scanf_s("%d", &again_num);
}
//6、输出游戏每次对局的过程及结果
void PrintResult()
{
printf("共对局%d次\n",game_num-1);
for (int i = 0; i < game_num-1; i++)
{
printf("第%d次:玩家---%s 电脑---%s 结果---%s\n", i+1, player_hd[i], computer_hd[i],result[i]);
}
}
//主函数
int main(int arg, int argv[])
{
int judge;//判断结果数
int retry;//判断是否重新开始
initialize();
int i=0;
if (mode == 0)//玩家可以自愿执行是否重新开始
{
do
{
printf("\n这是第%d回合", game_num);
read_create();
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
//记录对局手势
player_hd[i] = hd[player];
computer_hd[i] = hd[computer];
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge,i);
i++;
game_num++;
printf("是否继续游戏(0--exit,1---continue):");
scanf_s("%d", &retry);
} while (retry == 1);
}
else//猜赢几次就退出游戏
{
again_fun();
do
{
printf("\n这是第%d回合", game_num);
//判断是否为5的倍数,若为5的倍数,则计算机后出
read_create();
printf("玩家出%4s , 电脑出%4s\n", hd[player], hd[computer]);
//记录对局手势
player_hd[i] = hd[player];
computer_hd[i] = hd[computer];
judge = (player - computer + 3) % 3;
count_num(judge);
disp_result(judge,i);
i++;
game_num++;
} while (lose_num < again_num && win_num < again_num);
printf(win_num == again_num ? "\n你赢了\n" : "\n你输了\n");//注意printf的用法
}
printf("%d胜;%d负;%d平。\n\n", win_num, lose_num, draw_num);
PrintResult();
return 0;
}
以上的练习,函数划分还能进行细分