C语言五子棋胜利判断式

Python035

C语言五子棋胜利判断式,第1张

按照五子棋规则,当一方的棋子,在横向,纵向或斜向连续五个均为同一用户的棋子时,代表胜利。

另外,胜利判断只需要在一个新子落子时判断,且仅需要判断新子所在的四条线上(纵横加两个斜线)是否满足条件即可。

所以,可以以新子坐标为基准点,判断四次。

比如横向的,需要判断左侧和右侧连续的同类棋子个数,如果左侧+右侧+1(自身)总数>=5,则为胜利。

参考代码如下:

static int map[100][100] // 全局变量棋盘。未下子时值为0,下子时值为1或2,区分下子人。

int check_win(int m, int n)

{

    int total = 1 

    int i

    for(i = m-1 i >= 0 i --)//统计同行左侧连续同样棋子个数。

        if(map[i][n] == map[m][n]) total++

        else break

    for(i = m+1 i < 100 i ++)//统计同行右侧连续同样棋子个数。

        if(map[i][n] == map[m][n]) total++

        else break

    if(total>=5) return 1//胜利。

    return 0 //没有胜利。

}

其它类似。

没有做输入上的防呆

#include <stdio.h>

#include <stdlib.h>

int main(){

float x=0, money=0

char y

int z=0

printf("请输入加油量(千克):")

scanf("%f",&x)

printf("\n请输入汽油品种(a,b,c):")

scanf(" %c",&y)

printf("\n请输入服务类型(自己加请按1,协助加请按2):")

scanf("%d",&z)

switch(y){

case 'a':

if(z==1) money = x*3.25*0.95

else if(z==2) money = x*3.25*0.9

break

case 'b':

if(z==1) money = x*3*0.95

else if(z==2) money = x*3*0.9

break

case 'c':

if(z==1) money = x*2.75*0.95

else if(z==2) money = x*2.75*0.9

break

default:

printf("输入错误,无法计算\n")

system("pause")

return 0

}

printf("\n应付金额:%f\n",money)

system("pause")

return 0

}

我浏览了一下你的代码,你对胜利的判断采用的是检查整个棋盘的方式,这样做的最大弊端自然是低效,而且在编写斜方向判断的时候比较复杂。我建议你采用下子后判断的方式,即玩家1下了一个字后,像该子周围8个方向检查是否存在5子的情况,只需要一个判断方法,而且较为简单。

void chooseONE()

{

printf("第一玩家请选择下棋位置\n")

printf("第几个直的\n")

scanf("%d",&co)

printf("第几个横的\n")

scanf("%d",&ro)

while(arr[ro][co]==1||arr[ro][co]==2)

{

printf("重复了!!!\n")

printf("第几个直的\n")

scanf("%d",&co)

printf("第几个横的\n")

scanf("%d",&ro)

}

arr[ro][co]=1

//这里加判断代码,建议用一个判断函数,我给你写个吧

}

//我这里这个方法写了个大概,你看一下和你的代码结合一下就可以了,我用i和j作为for循环的变量,你用来做最大的长宽值,这些你都要改一下。

flag作为判断是否胜利的标志,playerNum是玩家的标志,分1和2,这个函数只写了左和左上的判断,其他方向楼主仿照着写

int win(int row, int col, int playerNum){

int i = 0,j = 0

int flag = 1

if(row - 4 >= 0){

flag = 1

for(i = rowi >= 0i--){

if(arr[i][j] != playerNum){

flag = 0

break

}

}

if(flag == 1){

return 1

}

}

if(row - 4 >= 0 &&col - 4 >= 0){

flag = 1

for(i = row ,j = col i >= 0&&j>=0i--,j--){

if(arr[i][j] != playerNum){

flag = 0

break

}

}

if(flag == 1){

return 1

}

}

}