阱字棋游戏,自各儿编写。请各位大神指出那些不足和缺陷。(程序完美运行无须修改)
阱字棋游戏,自己编写。请各位大神指出那些不足和缺陷。(程序完美运行无须修改)
//注:此程序单纯运用数组,函数,循环,判断实现。目前只学到这几样东西。指针和结构体等 不熟练 往后我加强练习
# include<stdio.h>
# define size 3
# include<windows.h>
int judge1(int a[][size],int x1);
int judge2(int b[][size],int x2);
int input(int c[][size],int x3);
int main(void){
int sum[size][size];
int i,j = 0;
int Initialize1,Initialize2 = 0;
int count2,count3;
count2=count3=0;
//初始化二维数组
for(Initialize1=0;Initialize1<size;Initialize1++){
for(Initialize2=0;Initialize2<size;Initialize2++){
sum[Initialize1][Initialize2] = 0;
}
}
for(Initialize1=0;Initialize1<size;Initialize1++){
for(Initialize2=0,count2=0,count3=0;Initialize2<size;Initialize2++,count2++){
if(Initialize2 < 3&&Initialize1 == 0){
printf("%d%d\t",count3,count2);
}if(Initialize2 < 3&&Initialize1 == 1){
if(count3<Initialize1)
count3++;
printf("%d%d\t",count3,count2);
}if(Initialize2 < 3&&Initialize1 == 2){
if(count3<Initialize1)
count3+=2;
printf("%d%d\t",count3,count2);
}
printf("%d\t",sum[Initialize1][Initialize2]);
}
printf("\n");
}
//输入
input(sum,size);
//输出
for(i=0;i<size;i++){//行和竖算法
for(j=0;j<size;j++){//对角线算法¨
printf("%d\t",sum[i][j]);
}
printf("\n");
}
//判断
if(judge1(sum,size)){
if(judge2(sum,size))
printf("平手");
}
system("pause");
return 0;
}
int input(int c[][size],int x3){
int code1,code2 = 0;
int i,j,y = 0;
printf("输入在几行几列,然后在输入1或者0,中间空格隔开。列如:1 1 0\n");
printf("nomofo代表1,nomof代表0\n");
for(i=0;i<x3;i++){
for(j=0;j<x3;j++){
printf("输入在几行几列");
scanf("%d%d%d",&code1,&code2,&y);
c[0+code1][0+code2]=y;
printf("第%d行,第%列\n",code1,code2);
c[0][0];
}
}
return 0;
}
int judge1(int a[][size],int x1){
int i,j,x,y = 0;
int nomofo,nomofx,nomofo1,nomofx1 = 0;
for(i=0,x=0;i<x1,x<x1;i++,x++)
{
nomofo=nomofx=nomofo1=nomofx1=0;
for(j=0,y=0;j<x1,y<x1;j++,y++){
if(a[i][j]==1){
nomofo++;
if(nomofo==x1){
printf("nomofo获胜\n");
return 0;
}
}
else{
nomofx++;
if(nomofx==x1){
printf("nomofx获胜\n");
return 0;
}
}
if(a[y][x]==1){
nomofo1++;
if(nomofo1==x1){
printf("nomofo获胜\n");
return 0;
}
}else{
nomofx1++;
if(nomofx1==x1){
printf("nomofx获胜\n");
return 0;
}
}
}
}
return 1;
}
int judge2(int b[][size],int x2){
int nomofo,nomofx,nomofo1,nomofx1;
int i,y = 0;
nomofo=nomofx=nomofo1=nomofx1=0;
for(i=0,y=2;i<x2,y>=0;i++,y--){
if(b[i][i]==1){
nomofo++;
if(nomofo==x2){
printf("nomofo获胜\n");
return 0;
}
}else{
nomofx++;
if(nomofx==x2){
printf("nomofx获胜\n");
return 0;
}
}
if(b[i][y]==1){
nomofo1++;
if(nomofo1==x2){
printf("nomofo»ñʤ\n");
return 0;
}
}else{
nomofx1++;
if(nomofx1==x2){
printf("nomofx获胜\n");
return 0;
}
}
}
return 1;
}
------解决思路----------------------
自己做一个测试,考虑到各种极端情况,并写下预期的执行结果,跑一遍以后把执行结果跟预期结果进行比对,看是否达到自己预期
//注:此程序单纯运用数组,函数,循环,判断实现。目前只学到这几样东西。指针和结构体等 不熟练 往后我加强练习
# include<stdio.h>
# define size 3
# include<windows.h>
int judge1(int a[][size],int x1);
int judge2(int b[][size],int x2);
int input(int c[][size],int x3);
int main(void){
int sum[size][size];
int i,j = 0;
int Initialize1,Initialize2 = 0;
int count2,count3;
count2=count3=0;
//初始化二维数组
for(Initialize1=0;Initialize1<size;Initialize1++){
for(Initialize2=0;Initialize2<size;Initialize2++){
sum[Initialize1][Initialize2] = 0;
}
}
for(Initialize1=0;Initialize1<size;Initialize1++){
for(Initialize2=0,count2=0,count3=0;Initialize2<size;Initialize2++,count2++){
if(Initialize2 < 3&&Initialize1 == 0){
printf("%d%d\t",count3,count2);
}if(Initialize2 < 3&&Initialize1 == 1){
if(count3<Initialize1)
count3++;
printf("%d%d\t",count3,count2);
}if(Initialize2 < 3&&Initialize1 == 2){
if(count3<Initialize1)
count3+=2;
printf("%d%d\t",count3,count2);
}
printf("%d\t",sum[Initialize1][Initialize2]);
}
printf("\n");
}
//输入
input(sum,size);
//输出
for(i=0;i<size;i++){//行和竖算法
for(j=0;j<size;j++){//对角线算法¨
printf("%d\t",sum[i][j]);
}
printf("\n");
}
//判断
if(judge1(sum,size)){
if(judge2(sum,size))
printf("平手");
}
system("pause");
return 0;
}
int input(int c[][size],int x3){
int code1,code2 = 0;
int i,j,y = 0;
printf("输入在几行几列,然后在输入1或者0,中间空格隔开。列如:1 1 0\n");
printf("nomofo代表1,nomof代表0\n");
for(i=0;i<x3;i++){
for(j=0;j<x3;j++){
printf("输入在几行几列");
scanf("%d%d%d",&code1,&code2,&y);
c[0+code1][0+code2]=y;
printf("第%d行,第%列\n",code1,code2);
c[0][0];
}
}
return 0;
}
int judge1(int a[][size],int x1){
int i,j,x,y = 0;
int nomofo,nomofx,nomofo1,nomofx1 = 0;
for(i=0,x=0;i<x1,x<x1;i++,x++)
{
nomofo=nomofx=nomofo1=nomofx1=0;
for(j=0,y=0;j<x1,y<x1;j++,y++){
if(a[i][j]==1){
nomofo++;
if(nomofo==x1){
printf("nomofo获胜\n");
return 0;
}
}
else{
nomofx++;
if(nomofx==x1){
printf("nomofx获胜\n");
return 0;
}
}
if(a[y][x]==1){
nomofo1++;
if(nomofo1==x1){
printf("nomofo获胜\n");
return 0;
}
}else{
nomofx1++;
if(nomofx1==x1){
printf("nomofx获胜\n");
return 0;
}
}
}
}
return 1;
}
int judge2(int b[][size],int x2){
int nomofo,nomofx,nomofo1,nomofx1;
int i,y = 0;
nomofo=nomofx=nomofo1=nomofx1=0;
for(i=0,y=2;i<x2,y>=0;i++,y--){
if(b[i][i]==1){
nomofo++;
if(nomofo==x2){
printf("nomofo获胜\n");
return 0;
}
}else{
nomofx++;
if(nomofx==x2){
printf("nomofx获胜\n");
return 0;
}
}
if(b[i][y]==1){
nomofo1++;
if(nomofo1==x2){
printf("nomofo»ñʤ\n");
return 0;
}
}else{
nomofx1++;
if(nomofx1==x2){
printf("nomofx获胜\n");
return 0;
}
}
}
return 1;
}
------解决思路----------------------
自己做一个测试,考虑到各种极端情况,并写下预期的执行结果,跑一遍以后把执行结果跟预期结果进行比对,看是否达到自己预期