这个C语言程序为什么会这样?
本帖最后由 还差几 于 2018-10-5 20:05 编辑程序思路:
两个exe文件为同一个文件。
开始让玩家选择角色(1/2),选择好后,就创建文档(玩家1.txt或玩家2.txt),玩家准备后,文档里打印‘Y’,则另一个玩家就可以知道另一个玩家的登录情况。
当双方都准备好后,游戏开始。
玩家1选择游玩局数,程序自己判定几局胜,玩家1输入的局数存入“局.txt”里,玩家2读取(详细方法见代码),问题就出在这里(有时出现上图情况,有时会读取失败,出现程序默认的局数(两个程序局数不一))。
如果无问题,则就双方出拳打印在自己的文档里(玩家1/2.txt),双方读取,判断输赢,如果一方达到胜利标准,则那方胜。
(后面过程一些请参照代码)
源代码在第二页
#include<stdio.h>
#include<string>
#define JU(ju) ju / 2 * 2
void Double(void);//双人模式函数
void DoubleBeight(int a);//双人模式开始函数
int ME;
int main(void)
{
int mode=0/*用于判断用户要玩什么模式*/, k=0/*用于用户输入错误时,给用户不同的提示*/;
printf("(=^ ^=)\n");
printf("欢迎进入剪刀石头布,如有问题或意见,请向QQ:3142110052回复或向来源地回复\n警告输入后不要中途退出\n请你输入你要进入的模式(人机:输入0,双人:输入1):");
for (int i = 0; i < 1; i++)
{
if (k < 11)
{
scanf_s("%d", &mode);
}
if (mode == 0)
{
printf("人机模式尚未开发……\n");
}
else
{
if (mode == 1)
{
printf("欢迎游玩双人模式\n");
Double();
}
else
{
i--;
k++;
switch (k)
{
case 1:
printf("你输入错误,请重新输入(人机:输入0,双人:输入1):");
break;
case 2:
printf("你输入错误,请认真确认再输入,请重新输入(人机:输入0,双人:输入1):");
break;
case 10:
printf("你下一次再输入错误,就将默认进入人机模式,请重新输入(人机:输入0,双人:输入1):");
break;
case 11:
mode = 0;
break;
default:
printf("你输入错误,你已输入错误%d次,再输入错误%d次就将默认进入人机模式!请重新输入(人机:输入0,双人:输入1):", k, (10 - k));
break;
}
}
}
}
printf("欢迎再来\n");
printf("输入A结束");
for (int i = 0; i < 1; i++)
{
if (getchar() == 'A')
{
i++;
}
i--;
}
switch (ME)
{
case 1:
remove("玩家1.txt");
remove("局.txt");
break;
default:
remove("玩家2.txt");
break;
}
return 0;
}
void Double(void)
{
errno_t err1, err2;//没事打的
FILE *fp1, *fp2;//玩家1、2的文件指针
char wj1, wj2;//用于判断玩家1、2是否准备
int Game_player_one = 0, Game_player_two = 0/*判断玩家1、2是否有空位*/, a = 0/*用于刷新,详细请看 bao_1*/;
int b = 0/*用于判断用户是否进入*/, c = 0/*-用于判断用户是退出游戏,还是要刷新*/, me = 0/*用于判断用户是哪个玩家*/;
int wjwj = 0/*用于给用户选择玩家几*/, k = 0/*用于用户输入错误时,给用户不同的提示*/;
int G1 = 0, G2 = 0;
s_1:
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
printf("\n玩家1已进入");
wj1 = fgetc(fp1);
if (wj1 == 'Y')
{
printf(",已准备。\n");
Game_player_one = 0;
}
else
{
printf(",未准备。\n");
Game_player_one = 2;
}
fclose(fp1);
}
else
{
Game_player_one = 1;
printf("玩家1可进入\n");
}
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
printf("玩家2已进入");
wj2 = fgetc(fp2);
if (wj2 == 'Y')
{
printf(",已准备。\n\n");
Game_player_two = 0;
}
else
{
printf(",未准备。\n\n");
Game_player_two = 2;
}
fclose(fp2);
}
else
{
Game_player_two = 1;
printf("玩家2可进入\n");
}
if (b == 1)
{
if (Game_player_one == 0 && Game_player_two == 0)
{
DoubleBeight(me);
c = 1;
}
}
else
{
if (Game_player_one == 1 && Game_player_two == 1)
{
printf("你要进入玩家(1或2),请输入(温馨提示:玩家1可以选择玩几局):");
for (int i = 0; i < 1; i++)
{
if (k <= 10)
{
scanf_s("%d", &wjwj);
}
if (wjwj==1)
{
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
fclose(fp1);
}
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
fclose(fp2);
}
if (G1 == 1 && G2 == 1)
{
printf("已满人,请退出\n");
return;
}
if (G1 == 1 && G2 != 1)
{
printf("玩家1已有人进入,请进入玩家2\n");
goto s_1;
}
else
{
printf("正在进入玩家1……\n");
if (err1 = fopen_s(&fp1, "玩家1.txt", "w") == 0)
{
printf("进入成功\n");
char A, Y;
for (int i = 0; i < 1; i++)
{
scanf_s("%c", &A, 1);
if (A == 'J')
{
fputc('Y', fp1);
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
Y = fgetc(fp2);
fclose(fp2);
}
if (G2 == 1)
{
if (Y == 'Y')
{
me = 1;
ME = me;
b = 1;
fclose(fp1);
printf("游戏开始\n");
goto s_1;
}
else
{
printf("玩家2已进入,请等待玩家2准备\n");
}
}
else
{
printf("请你耐心等待玩家2进入\n");
}
me = 1;
ME = me;
b = 1;
fclose(fp1);
}
else
{
printf("输入J准备:");
i--;
}
}
}
else
{
printf("进入失败\n请重试\n");
goto s_1;
}
}
}
else
{
if (wjwj==2)
{
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
fclose(fp1);
}
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
fclose(fp2);
}
if (G1 == 1 && G2 == 1)
{
printf("已满人,请退出\n");
return;
}
if (G1 != 1 && G2 == 1)
{
printf("玩家2已有人进入,请进入玩家1\n");
goto s_1;
}
else
{
printf("正在进入玩家2……\n");
if (err2 = fopen_s(&fp2, "玩家2.txt", "w") == 0)
{
printf("进入成功\n");
char A, Y;
for (int i = 0; i < 1; i++)
{
scanf_s("%c", &A, 1);
if (A == 'J')
{
fputc('Y', fp2);
if (err2 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
Y = fgetc(fp1);
fclose(fp1);
}
if (G1 == 1)
{
if (Y == 'Y')
{
me = 2;
ME = me;
b = 1;
fclose(fp2);
printf("游戏开始\n");
goto s_1;
}
else
{
printf("玩家1已进入,请等待玩家1准备\n");
}
}
else
{
printf("请你耐心等待玩家1进入\n");
}
me = 2;
ME = me;
b = 1;
fclose(fp2);
}
else
{
printf("输入J准备:");
i--;
}
}
}
else
{
printf("进入失败\n请重试\n");
goto s_1;
}
}
}
else
{
i--;
k++;
switch (k)
{
case 1:
printf("你输入错误,请重新输入(玩家1:输入1,玩家2:输入2):");
break;
case 2:
printf("你输入错误,请认真确认再输入,请重新输入(玩家1:输入1,玩家2:输入2):");
break;
case 10:
printf("你下一次再输入错误,就将默认进入玩家1,请重新输入(玩家1:输入1,玩家2:输入2):");
break;
case 11:
wjwj = 1;
break;
default:
printf("你输入错误,你已输入错误%d次,再输入错误%d次就将默认进入玩家1!请重新输入(玩家1:输入1,玩家2:输入2):", k, (10 - k));
break;
}
}
}
}
}
else
{
if (Game_player_one == 1)//玩家1进入
{
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
fclose(fp1);
}
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
fclose(fp2);
}
if (G1 == 1 && G2 == 1)
{
printf("已满人,请退出\n");
return;
}
if (G1 == 1 && G2 != 1)
{
printf("玩家1已有人进入,玩家2有空位,请进入玩家2\n");
goto s_1;
}
else
{
printf("正在进入玩家1……\n");
if (err1 = fopen_s(&fp1, "玩家1.txt", "w") == 0)
{
printf("进入成功\n");
char A, Y;
for (int i = 0; i < 1; i++)
{
scanf_s("%c", &A, 1);
if (A == 'J')
{
fputc('Y', fp1);
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
Y = fgetc(fp2);
fclose(fp2);
}
if (G2 == 1)
{
if (Y == 'Y')
{
me = 1;
ME = me;
b = 1;
fclose(fp1);
printf("游戏开始\n");
goto s_1;
}
else
{
printf("玩家2已进入,请等待玩家2准备\n");
}
}
else
{
printf("请你耐心等待玩家2进入\n");
}
me = 1;
ME = me;
b = 1;
fclose(fp1);
}
else
{
printf("输入J准备:");
i--;
}
}
}
else
{
printf("进入失败\n请重试\n");
goto s_1;
}
}
}
else
{
if (Game_player_two == 2)//玩家2进入
{
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
fclose(fp1);
}
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
fclose(fp2);
}
if (G1 == 1 && G2 == 1)
{
printf("已满人,请退出\n");
return;
}
if (G1 != 1 && G2 == 1)
{
printf("玩家2已有人进入,玩家1有空位,请进入玩家1\n");
goto s_1;
}
else
{
printf("正在进入玩家2……\n");
if (err2 = fopen_s(&fp2, "玩家2.txt", "w") == 0)
{
printf("进入成功\n");
char A, Y;
for (int i = 0; i < 1; i++)
{
scanf_s("%c", &A, 1);
if (A == 'J')
{
fputc('Y', fp1);
if (err2 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
Y = fgetc(fp1);
fclose(fp1);
}
if (G1 == 1)
{
if (Y == 'Y')
{
me = 2;
ME = me;
b = 1;
fclose(fp2);
printf("游戏开始\n");
goto s_1;
}
else
{
printf("玩家1已进入,请等待玩家1准备\n");
}
}
else
{
printf("请你耐心等待玩家1进入\n");
}
me = 2;
ME = me;
b = 1;
fclose(fp2);
}
else
{
printf("输入J准备:");
i--;
}
}
}
else
{
printf("进入失败\n请重试\n");
goto s_1;
}
}
}
else
{
goto s_1;
}
}
}
}
if (c == 0)//刷新
{
//bao_1
printf("刷新输入666,其他数字退出:");
scanf_s("%d", &a);
if (a == 666)
{
goto s_1;
}
}
}
void DoubleBeight(int me)
{
int mec, itc;//我与对方出的拳
int mefraction, itfraction;
errno_t err1, err2;//没事打的
FILE *fp1, *fp2;//玩家1、2的文件指针
int a = 0;//用于刷新
int c = 2;//用于判断用户是否输入
int k = 0;//用于用户输入错误时,给用户不同的提示
int G1 = 0, G2 = 0;//判断对方是否在线
int ju = 3/*局数*/, js = 2/*几局胜*/;
char ch;//用于读取文件字符
int histoy;//用于记录每盘的游玩记录
if (me == 1)
{
s_1:
//判断对方是否在线
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
fclose(fp2);
}
if (G2 != 1)
{
printf("对方已掉线……");
printf("请退出重进……");
for (int i = 0; i < 1; i++)
{
printf("输入A退出");
if (getchar() == 'A')
{
i++;
}
i--;
}
}
FILE *p;
printf("请问您要玩几局?(最多99局)\n请输入:");
for (int i = 0; i < 1; i++)
{
scanf_s("%d", &ju);
if (ju > 99)
{
i--;
printf("不能超过99局,请重新输入:");
}
}
if (JU(ju) == ju)
{
js = ju / 2;
}
else
{
js = (ju / 2) + 1;
}
fopen_s(&p, "局.txt", "w");
printf("%d局%d胜\n", ju, js);
switch (ju/10)
{
case 1:
fputc('A', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju-10)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 2:
fputc('B', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 20)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 3:
fputc('C', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 30)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 4:
fputc('D', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 40)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 5:
fputc('E', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 50)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 6:
fputc('F', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 60)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 7:
fputc('G', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 70)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 8:
fputc('H', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 80)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
case 9:
fputc('I', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 90)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
default:
fputc('J', p);
fclose(p);
fopen_s(&p, "局.txt", "a+");
switch (ju - 0)
{
case 1:
fputc('A', p);
fclose(p);
break;
case 2:
fputc('B', p);
fclose(p);
break;
case 3:
fputc('C', p);
fclose(p);
break;
case 4:
fputc('D', p);
fclose(p);
break;
case 5:
fputc('E', p);
fclose(p);
break;
case 6:
fputc('F', p);
fclose(p);
break;
case 7:
fputc('G', p);
fclose(p);
break;
case 8:
fputc('H', p);
fclose(p);
break;
case 9:
fputc('I', p);
fclose(p);
break;
default:
fputc('J', p);
fclose(p);
break;
}
break;
}
for (int i = 0; i < ju; i++)
{
printf("你请出拳(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
for (int j = 0; j < 1; j++)
{
if (k < 11)
{
scanf_s("%d", &mec);
}
switch (mec)
{
case 0:
fopen_s(&fp1, "玩家1.txt", "r+");
fputc('A', fp1);
fclose(fp1);
histoy = 0;
break;
case 1:
fopen_s(&fp1, "玩家1.txt", "r+");
fputc('B', fp1);
fclose(fp1);
histoy = 1;
break;
case 2:
fopen_s(&fp1, "玩家1.txt", "r+");
fputc('C', fp1);
fclose(fp1);
histoy = 2;
break;
case 4126242:
printf("开挂是错误的选择,你已被退出程序\n");
getchar();
exit(1);
break;
case 1281742605:
printf("挂正在开发中\n");
j--;
break;
default:
k++;
j--;
switch (k)
{
case 1:
printf("你输入错误,请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
break;
case 2:
printf("你输入错误,请认真确认再输入,请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
break;
case 10:
printf("你下一次再输入错误,就将默认默认出石头,请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
break;
case 11:
mec = 0;
break;
default:
printf("你输入错误,你已输入错误%d次,再输入错误%d次就将默认出石头!请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):", k, (10 - k));
break;
}
break;
}
}
//判断对方是否在线
if (err2 = fopen_s(&fp2, "玩家2.txt", "r") == 0)
{
G2 = 1;
fclose(fp2);
}
if (G2 != 1)
{
printf("对方已掉线……");
printf("请退出重进……");
for (int i = 0; i < 1; i++)
{
printf("输入A退出");
if (getchar() == 'A')
{
i++;
}
i--;
}
}
fopen_s(&fp2, "玩家2.txt", "r");
ch = fgetc(fp2);
if (ch != 'Y')
{
switch (ch)
{
case 'A':
itc = 0;
histoy = itc;
printf("对方已出拳,正在判断胜负……\n");
break;
case 'B':
itc = 1;
histoy = itc;
printf(" 对方已出拳,正在判断胜负……\n");
break;
default:
itc = 2;
histoy = itc;
printf(" 对方已出拳, 正在判断胜负……\n");
break;
}
switch (mec)//判断胜负
{
case 0://玩家1输入石头
switch (itc)
{
case 0://玩家2输入石头
printf("对方出石头,平局,这局不算,继续\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
i--;
break;
case 1://玩家2输入布
itfraction++;
printf("对方出布,对方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 2;
break;
default://玩家2输入剪刀
mefraction++;
printf("对方出剪刀,我方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 1;
break;
}
break;
case 1://玩家1输入布
switch (itc)
{
case 0://玩家2输入石头
mefraction++;
printf("对方出石头,我方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 1;
break;
case 1://玩家2输入布
printf("对方出布,平局,这局不算,继续\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
i--;
break;
default://玩家2输入剪刀
itfraction++;
printf("对方出剪刀,对方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 2;
break;
}
break;
default://玩家1输入剪刀
switch (itc)
{
case 0://玩家2输入石头
itfraction++;
printf("对方出石头,对方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
break;
histoy = 2;
case 1://玩家2输入布
mefraction++;
printf("对方出布,我方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 1;
break;
default://玩家2输入剪刀
printf("对方出剪刀,平局,这局不算,继续\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
i--;
break;
}
break;
}
if (mefraction == js)
{
i = ju;
printf("我方胜利局数已达到%d局,我方胜利", js);
}
if (itfraction == js)
{
i = ju;
printf("对方胜利局数已达到%d局,对方胜利", js);
}
if (mefraction == js && i == js)
{
printf("你竟然全胜\n");
}
if (itfraction == js && i == js)
{
printf("对方竟然全胜\n");
}
if (mefraction == js || itfraction == js)
{
printf("是否查看游戏记录(是/0 否(退出游戏)/其他):");
int app;
scanf_s("%d", &app);
if (app == 0)
{
for (int p = 0; p < 99; p++)
{
if (histoy)
{
p = 99;
}
else
{
printf("第%d局:", p + 1);
switch (histoy)
{
case 0:
printf("玩家1出石头,");
break;
case 1:
printf("玩家1出布,");
break;
default:
printf("玩家1出剪刀,");
break;
}
switch (histoy)
{
case 0:
printf("玩家2出石头,");
break;
case 1:
printf("玩家2出布,");
break;
default:
printf("玩家2出剪刀,");
break;
}
switch (histoy)
{
case 1:
printf("玩家1胜\n");
break;
default:
printf("玩家2胜\n");
break;
}
}
}
printf("玩家1胜%d局,玩家2胜%d局\n", mefraction, itfraction);
}
}
}
else
{
printf("请等待对方出拳……\n");
c = 0;
}
if (c == 0)//刷新
{
printf("刷新输入666,其他数字退出:");
scanf_s("%d", &a);
if (a == 666)
{
c = 5;
a = 2;
goto s_1;
}
}
}
}
else
{
s_2:
//判断对方是否在线
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
fclose(fp1);
}
if (G1 != 1)
{
printf("对方已掉线……");
printf("请退出重进……");
for (int i = 0; i < 1; i++)
{
printf("输入A退出");
if (getchar() == 'A')
{
i++;
}
i--;
}
}
s_3:
FILE *q;
char Ju;
if (fopen_s(&q, "局.txt", "r") != 0)
{
printf("玩家1还未决定几局几胜,请稍等……\n");
for (int i = 0; i < 1; i++)
{
int y;
printf("输入1刷新:");
scanf_s("%d", &y);
if (y == 1)
{
fclose(q);
gotos_3;
}
else
{
i--;
}
}
}
else
{
for (int i = 0; i < 2; i++)
{
fgets(Ju, 3, stdin);
fclose(q);
}
switch (Ju)
{
case 'A':
ju = ju + 10;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'B':
ju = ju + 20;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'C':
ju = ju + 30;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'D':
ju = ju + 40;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'E':
ju = ju + 50;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'F':
ju = ju + 60;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'G':
ju = ju + 70;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'H':
ju = ju + 80;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
break;
}
break;
case 'I':
ju = ju + 90;
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
ju = ju + 0;
break;
}
break;
default:
switch (Ju)
{
case 'A':
ju = ju + 1;
break;
case 'B':
ju = ju + 2;
break;
case 'C':
ju = ju + 3;
break;
case 'D':
ju = ju + 4;
break;
case 'E':
ju = ju + 5;
break;
case 'F':
ju = ju + 6;
break;
case 'G':
ju = ju + 7;
break;
case 'H':
ju = ju + 8;
break;
case 'I':
ju = ju + 9;
break;
default:
ju = ju + 0;
break;
}
break;
}
}
if (JU(ju) == ju)
{
js = ju / 2;
}
else
{
js = (ju / 2) + 1;
}
printf("玩家1决定%d局%d胜\n", ju, js);
for (int i = 0; i < ju; i++)
{
printf("你请出拳(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
for (int j = 0; j < 1; j++)
{
if (k < 11)
{
scanf_s("%d", &mec);
}
switch (mec)
{
case 0:
fopen_s(&fp2, "玩家2.txt", "r+");
fputc('A', fp2);
fclose(fp2);
histoy = 0;
break;
case 1:
fopen_s(&fp2, "玩家2.txt", "r+");
fputc('B', fp2);
fclose(fp2);
histoy = 1;
break;
case 2:
fopen_s(&fp2, "玩家2.txt", "r+");
fputc('C', fp2);
fclose(fp2);
histoy = 2;
break;
case 4126242:
printf("开挂是错误的选择,你已被退出程序\n");
getchar();
exit(1);
break;
case 1281742605:
printf("挂正在开发中\n");
j--;
break;
default:
k++;
j--;
switch (k)
{
case 1:
printf("你输入错误,请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
break;
case 2:
printf("你输入错误,请认真确认再输入,请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
break;
case 10:
printf("你下一次再输入错误,就将默认默认出石头,请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):");
break;
case 11:
mec = 0;
break;
default:
printf("你输入错误,你已输入错误%d次,再输入错误%d次就将默认出石头!请重新输入(0:石头 1:布 2:剪刀 12*9*6-54+456446465*3131*0+4646*888=?:开挂):", k, (10 - k));
break;
}
break;
}
}
//判断对方是否在线
if (err1 = fopen_s(&fp1, "玩家1.txt", "r") == 0)
{
G1 = 1;
fclose(fp1);
}
if (G1 != 1)
{
printf("对方已掉线……");
printf("请退出重进……");
for (int i = 0; i < 1; i++)
{
printf("输入A退出");
if (getchar() == 'A')
{
i++;
}
i--;
}
}
fopen_s(&fp1, "玩家1.txt", "r");
ch = fgetc(fp1);
if (ch != 'Y')
{
switch (ch)
{
case 'A':
itc = 0;
histoy = itc;
printf("对方已出拳,正在判断胜负……\n");
break;
case 'B':
itc = 1;
histoy = itc;
printf(" 对方已出拳,正在判断胜负……\n");
break;
default:
itc = 2;
histoy = itc;
printf(" 对方已出拳, 正在判断胜负……\n");
break;
}
switch (mec)//判断胜负
{
case 0://玩家2输入石头
switch (itc)
{
case 0://玩家1输入石头
printf("对方出石头,平局,这局不算,继续\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
i--;
break;
case 1://玩家1输入布
itfraction++;
printf("对方出布,对方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 1;
break;
default://玩家1输入剪刀
mefraction++;
printf("对方出剪刀,我方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 2;
break;
}
break;
case 1://玩家2输入布
switch (itc)
{
case 0://玩家1输入石头
mefraction++;
printf("对方出石头,我方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 2;
break;
case 1://玩家1输入布
printf("对方出布,平局,这局不算,继续\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
i--;
break;
default://玩家1输入剪刀
itfraction++;
printf("对方出剪刀,对方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 1;
break;
}
break;
default://玩家2输入剪刀
switch (itc)
{
case 0://玩家1输入石头
itfraction++;
printf("对方出石头,对方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
break;
histoy = 1;
case 1://玩家1输入布
mefraction++;
printf("对方出布,我方胜\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
histoy = 2;
break;
default://玩家1输入剪刀
printf("对方出剪刀,平局,这局不算,继续\n");
printf("我方胜%d局,对方胜%d局,再接再厉\n", mefraction, itfraction);
i--;
break;
}
break;
}
if (mefraction == js)
{
i = ju;
printf("我方胜利局数已达到%d局,我方胜利", js);
}
if (itfraction == js)
{
i = ju;
printf("对方胜利局数已达到%d局,对方胜利", js);
}
if (mefraction == js && i == js)
{
printf("你竟然全胜\n");
}
if (itfraction == js && i == js)
{
printf("对方竟然全胜\n");
}
if (mefraction == js || itfraction == js)
{
printf("是否查看游戏记录(是/0 否(退出游戏)/其他):");
int app;
scanf_s("%d", &app);
if (app == 0)
{
for (int p = 0; p < 99; p++)
{
printf("\\**********************/");
if (histoy)
{
p = 99;
}
else
{
printf("\\*第%d局:", p + 1);
switch (histoy)
{
case 0:
printf("玩家1出石头,");
break;
case 1:
printf("玩家1出布 ,");
break;
default:
printf("玩家1出剪刀,");
break;
}
switch (histoy)
{
case 0:
printf("玩家2出石头,");
break;
case 1:
printf("玩家2出布 ,");
break;
default:
printf("玩家2出剪刀,");
break;
}
switch (histoy)
{
case 1:
printf("玩家1胜*/\n");
break;
default:
printf("玩家2胜*/\n");
break;
}
}
}
printf("玩家1胜%d局,玩家2胜%d局\n", itfraction, mefraction);
}
}
}
else
{
printf("请等待对方出拳……\n");
c = 0;
}
if (c == 0)//刷新
{
printf("刷新输入666,其他数字退出:");
scanf_s("%d", &a);
if (a == 666)
{
c = 5;
a = 2;
goto s_2;
}
}
}
}
}
咳咳,我看了下你的代码,2000多行把我给吓着了。。。。
我不懂你的思路,所以不好调试。而其代码真的太长了
实现这个小游戏其实不需要那么多代码的,你的代码过于复杂,你可以试试把他控制在200~~500行以内
逻辑紊乱,而且用了好几个goto函数,在c语言和c++中是强烈不推荐使用的因为会破坏逻辑结构,内存被打乱等。。
如果是读入出现错误的话,你看看是不是 读写的方式写错了 比如 W+ 或者R+弄错之类的。
你先点击.EXE输入1玩家选了局数后,在编译器中打开2玩家输入,在代码段的读取局数文本哪里下一个断点,一步一步的跟着调试。。那步出错就是哪步有问题(调试一般编译器是F5或者F7 )
有源码吗,
你下断点调试啊,相同报错,可能是由多种原因造成的
代码多的时候,一定要多调试,调试一般都能解决问题的 紫霞圣人 发表于 2018-10-5 19:53
有源码吗,
你下断点调试啊,相同报错,可能是由多种原因造成的
代码多的时候,一定要多调试,调试一般都 ...
我这是两个程序(一样的程序)在运行,该如何调试。
现在更新了,代码在第二页 紫霞圣人 发表于 2018-10-5 21:08
咳咳,我看了下你的代码,2000多行把我给吓着了。。。。
我不懂你的思路,所以不好调试。而其代码真的太长 ...
好的,我调试修剪下代码
页:
[1]