精华内容
下载资源
问答
  • c语言五子棋
    2021-05-24 06:42:30

    C语言 五子棋(初学者版)

    C语言 五子棋(初学者版)

    #include

    #include

    #include

    #include

    #define set 16//定义棋局大小,必须为偶数

    ///声明函数

    void jie_mian();

    void chu_shi_hua();

    void xian_shi();

    int hua_pan(int ,int );

    void ti_shi();

    int zhuan(char );

    void R_luo_zi();

    void D_luo_zi();

    void R_D();

    void xia_qi();

    int pan_shu_ying();

    void xian_shi_shu_ying();

    void qing_quan();

    int yan_quan();

    int ji_quan_(int flag_f_,int f_);

    void ji_quan();

    void rand_luo_zi(int *x,int *y);

    int pan_quan_4(int f_);

    int pan_quan_3_5(int f_);

    int pan_quan_2_5(int f_);

    int pan_quan_3(int f_);

    int pan_quan_2(int f_);

    int pan_quan_1(int f_);

    ///声明函数

    //定义全局变量

    int qi_pan[set+1][set+1]={0};//棋盘数组

    int quan[set][set]={};//记录各位子的权

    char flag;//判断是否退出游戏标志,T或t为退出标志,q或Q代表退回上一级

    int flag_1;//判断该处是否已经落子标志,0代表无,1代表有,-1代表输入坐标错误

    int flag_2;//0表示人人对战,1表示人机对战

    int flag_XZ;//记录该谁落子,0代表黑,1代表白

    int flag_SY;//输赢判断标志。0表示未分胜败,1表示赢,然后通过落子判断谁赢

    //定义全局变量

    int main()

    {

    //int x,y;//落子的位置

    system("color F0");

    //标志初始化

    flag=' ';

    flag_1=0;

    flag_2=0;

    flag_XZ=0;

    flag_SY=0;

    while(flag!='t'&&flag!='T')

    {

    system("cls");//清屏

    chu_shi_hua();//初始化棋盘

    jie_mian();//进入界面

    fflush(stdin);

    scanf("%c",&flag);

    while(flag!='t'&&flag!='T')

    {

    if(flag=='q'||flag=='Q')

    {

    flag_XZ=0;//重置落子的顺序

    flag_SY=0;//重置输赢状态

    break;

    }

    system("cls");//清屏

    xian_shi();//显示棋盘状态

    ti_shi();//显示提示信息

    xia_qi();//黑和白依次落子

    xian_shi_shu_ying();

    }

    }

    return 0;

    }

    void jie_mian()//进入界面

    {

    printf("******************************************************************\n\n\n\n\n");

    printf("\t\t\t欢迎使用\n\n\t\tmake by song-dingkai@\n\n\n\n\n\n");

    printf("******************************************************************\n");

    printf("\t\t\t0 表示人人对战\n\t\t\t1 表示人机对战\n");

    printf("\t\t\tT 退出游戏\t\n");

    }

    void chu_shi_hua()//初始化棋盘

    {

    for(int i=1;i

    {

    for(int j=1;j

    {

    qi_pan[i][j]='+';

    }

    if(i<10)

    {

    qi_p

    更多相关内容
  • 这是我大一放假时的C语言课程设计的作业,用easyX实现了人人模式,人机困难简单两种模式,下棋提示,背景音乐、鼠标操作。包含设计报告。 由于时间紧迫,没有对代码进行优化,比较乱。有兴趣的小伙伴可以下载下来看...
  • 使用C语言基于EGE图形库实现的五子棋小游戏,实验报告,C语言程序设计的结课作业,实现了人机对弈与人人对战功能。有相应的音乐
  • C语言五子棋

    2018-06-05 20:04:25
    无聊写的五子棋 算个练手 C语言写的 不是很完善 还望各位多加指正
  • c语言五子棋代码,无错误,适合新入门的计算机初学者
  • C语言实现的五子棋小游戏,有简单的菜单界面,并且可以有人机对战功能,人人对战功能,悔棋功能,感兴趣的可以下载,希望可以帮到大家!
  • C语言五子棋完整源码

    2017-10-05 11:11:33
    希望大家能学到一些什么,以供参考,这是一个C语言做的五子棋源码程序,谢谢大家支持。
  • C语言 五子棋

    2014-09-23 11:28:32
    C语言源代码 五子棋 人人对战 可变棋子的外观
  • 我们通过对《C语言》的初步学习后,本学期末进行了课程程序设计,设计课题为“五子棋”。本程序设计为人与人对弈, 一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连, 首先实现五子...
  • c语言五子棋游戏c语言五子棋游戏
  • 这个五子棋程序是基于c语言窗口命令行写的。本人花费大量时间写的,希望能帮助你们。
  • c语言五子棋

    2019-01-19 17:48:12
    这是我自己创建的一个用c编的五子棋小程序,有兴趣可以看看
  • C语言课程设计课题,比较实用的五子棋程序代码,可进行双人对战,人机对战等
  • c语言五子棋easyx

    2017-10-06 11:01:27
    C语言五子棋包含人机人人联机 联机(服务器端未在内)音乐删掉了有点大
  • C语言五子棋游戏

    2021-05-20 17:24:21
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼/*初始化游戏界面:1.绘图环境2.背景图片3.背景音乐4.绘制格子5.绘制边界线6.显示黑棋为玩家1,白棋为玩家2下棋:1.while循环让游戏能不断的玩下去2....

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    /*

    初始化游戏界面:

    1.绘图环境

    2.背景图片

    3.背景音乐

    4.绘制格子

    5.绘制边界线

    6.显示黑棋为玩家1,白棋为玩家2

    下棋:

    1.while循环让游戏能不断的玩下去

    2.定义一个保存鼠标消息的变量,获取鼠标消息

    3.鼠标左键按下的时候下棋

    4.探讨怎样实现玩家轮流下棋

    5.探讨怎样让玩家在十字交叉的位置下棋

    6.解决同位置可以反复下棋的问题

    */

    #include

    #include

    #include

    #include

    #define N20

    int chess[N][N] = { 0 };

    //用来记录轮到玩家1还是玩家2

    int flag = 0;

    void initGame();

    void playChess();

    int judge(int, int);

    HWND hWnd;

    int main()

    {

    //初始化游戏

    initGame();

    playChess();

    return 0;

    }

    void initGame()

    {

    initgraph(600, 500);

    loadimage(NULL, L"1.jpg");

    //绘制棋盘

    for (int i = 1; i < 20; i++)

    {

    setlinestyle(PS_SOLID, 1);

    setlinecolor(BLACK);

    line(i * 25, 0, i * 25, 500);

    line(0, i * 25, 500, i * 25);

    }

    //绘制棋盘边界线

    setlinestyle(PS_SOLID, 2);

    line(500, 0, 500, 500);

    line(0, 500, 500, 500);

    outtextxy(505, 20, L"黑棋:玩家1");

    outtextxy(505, 50, L"白棋:玩家2");

    outtextxy(505, 70, L"加群");

    outtextxy(505, 90, L"626871916");

    outtextxy(505, 110, L"邀请码,华灯");

    }

    void playChess()

    {

    int a = 0, b = 0;

    int x, y;

    MOUSEMSG m;

    hWnd = GetHWnd();

    while (1)

    {

    m = GetMouseMsg();//获取鼠标消息

    for (int i = 1; i < 20; i++)

    {

    for (int j = 1; j < 20; j++)

    {

    if (abs(m.x - i * 25) < 12 && abs(m.y - j * 25) < 12)

    {

    a = i;

    b = j;

    x = i * 25;

    y = j * 25;

    }

    }

    }

    if (m.uMsg == WM_LBUTTONDOWN)

    {

    if (chess[a][b] != 0)

    {

    MessageBox(hWnd, L"这里已经有棋子了,请重新选择下棋的位置", L"提示", MB_OK);

    continue;

    }

    else

    {

    if (flag % 2 == 0)

    {

    outtextxy(505, 200, L"请玩家2落子");

    setfillcolor(BLACK);

    solidcircle(x, y, 10);

    chess[a][b] = 1;

    }

    else

    {

    outtextxy(505, 200, L"请玩家1落子");

    setfillcolor(WHITE);

    solidcircle(x, y, 10);

    chess[a][b] = 2;

    }

    }

    flag++;

    }

    if (judge(a, b))

    {

    if (1 == flag % 2)

    {

    MessageBox(hWnd, L"玩家1胜利", L"游戏结束", MB_OK);

    return;//修复BUG

    }

    else

    {

    MessageBox(hWnd, L"玩家2胜利", L"游戏结束", MB_OK);

    return;//修复BUG

    }

    }

    }

    }

    int judge(int x, int y)

    {

    int i, j;

    int t = 2 - flag % 2;//flag%2=0时,t=2

    for (i = x - 4, j = y; i <= x; i++)

    {

    if (i >= 1 && i <= N - 4 && t == chess[i][j] && t == chess[i + 1][j] && t == chess[i + 2][j] && t == chess[i + 3][j] && t == chess[i + 4][j])

    return 1;

    }

    for (i = x, j = y - 4; j <= y; j++)

    {

    if (j >= 1 && j <= N - 4 && t == chess[i][j] && t == chess[i][j + 1] && t == chess[i][j + 2] && t == chess[i][j + 3] && t == chess[i][j + 4])

    return 1;

    }

    for (i = x - 4, j = y - 4; i <= x, j <= y; i++, j++)

    {

    if (i >= 1 && i <= N - 4 && j >= 1 && j <= N - 4 && t == chess[i][j] && t == chess[i + 1][j + 1] && t == chess[i + 2][j + 2] && t == chess[i + 3][j + 3] && t == chess[i + 4][j + 4])

    return 1;

    }

    for (i = x - 4, j = y + 4; i <= x, j >= 1; i++, j--)

    {

    if (i >= 1 && i <= N - 4 && j >= 1 && j <= N - 4 && t == chess[i][j] && t == chess[i + 1][j - 1] && t == chess[i + 2][j - 2] && t == chess[i + 3][j - 3] && t == chess[i + 4][j - 4])

    return 1;

    }

    return 0;

    }

    2ff396a7b277807aa5020372ac67f58b.pngguan

    展开全文
  • c语言编写的五子棋程序
  • c语言五子棋大作业

    2018-01-06 16:41:19
    简单的c++五子棋大作业,可以用于应付期末大作业。
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼代码#include #define right 'r'#define lower 'l'#define lower_right 'i'#define lower_left 'e'#define none 'o'int table[19][19];int hit_space(int x, int y, char...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    代码

    #include

    #define right 'r'

    #define lower 'l'

    #define lower_right 'i'

    #define lower_left 'e'

    #define none 'o'

    int table[19][19];

    int hit_space(int x, int y, char vec)

    {

    if (vec == right)

    {

    if (x - 1 >= 0 && table[x - 1][y] == 0)

    return 1;

    if (x + 4 < 19 && table[x + 4][y] == 0)

    return 1;

    }

    if (vec == lower)

    {

    if (y - 1 >= 0 && table[x][y - 1] == 0)

    return 1;

    if (y + 4 < 19 && table[x][y + 4] == 0)

    return 1;

    }

    if (vec == lower_right)

    {

    if (x - 1 >= 0 && y - 1 >= 0 && table[x - 1][y - 1] == 0)

    return 1;

    if (x + 4 < 19 && y + 4 < 19 && table[x + 4][y + 4] == 0)

    return 1;

    }

    if (vec == lower_left)

    {

    if (x - 1 >= 0 && y + 1 < 19 && table[x - 1][y + 1] == 0)

    return 1;

    if (x + 4 < 19 && y - 4 >= 0 && table[x + 4][y - 4] == 0)

    return 1;

    }

    return 0;

    }

    int tetra_colinear_on_vec(int x, int y, char vec)

    {

    if (vec == right)

    {

    if (x + 3 < 19

    && table[x][y] == table[x + 1][y]

    && table[x + 1][y] == table[x + 2][y]

    && table[x + 2][y] == table[x + 3][y])

    return 1;

    }

    if (vec == lower)

    {

    if (y + 3 < 19

    && table[x][y] == table[x][y + 1]

    && table[x][y + 1] == table[x][y + 2]

    && table[x][y + 2] == table[x][y + 3])

    return 1;

    }

    if (vec == lower_right)

    {

    if (x + 3 < 19 && y + 3 < 19

    && table[x][y] == table[x + 1][y + 1]

    && table[x + 1][y + 1] == table[x + 2][y + 2]

    && table[x + 2][y + 2] == table[x + 3][y + 3])

    return 1;

    }

    if (vec == lower_left)

    {

    if (x + 3 < 19 && y - 3 >= 0

    && table[x][y] == table[x + 1][y - 1]

    && table[x + 1][y - 1] == table[x + 2][y - 2]

    && table[x + 2][y - 2] == table[x + 3][y - 3])

    return 1;

    }

    return 0;

    }

    char tetra_colinear(int x, int y)

    {

    char vec;

    vec = right;

    if (tetra_colinear_on_vec(x, y, vec))

    return vec;

    vec = lower;

    if (tetra_colinear_on_vec(x, y, vec))

    return vec;

    vec = lower_right;

    if (tetra_colinear_on_vec(x, y, vec))

    return vec;

    vec = lower_left;

    if (tetra_colinear_on_vec(x, y, vec))

    return vec;

    return none;

    }

    int checkmate()

    {

    int i, j;

    for (i = 0; i < 19; i++)

    for (j = 0; j < 19; j++)

    {

    if (table[i][j] == 1)

    {

    char vec = tetra_colinear(i, j);

    if (vec == right || vec == lower || vec == lower_right||vec==lower_left)

    {

    if (hit_space(i, j, vec))

    {

    printf("1:%d,%d\n", i+1, j+1);

    return 1;

    }

    }

    }

    }

    for (i = 0; i < 19; i++)

    for (j = 0; j < 19; j++)

    {

    if (table[i][j] == 2)

    {

    char vec = tetra_colinear(i, j);

    if (vec == right || vec == lower || vec == lower_right || vec == lower_left)

    {

    if (hit_space(i, j, vec))

    {

    printf("2:%d,%d\n", i+1, j+1);

    return 1;

    }

    }

    }

    }

    return 0;

    }

    int main()

    {

    int i,j;

    for (i = 0; i < 19; i++)

    for (j = 0; j < 19; j++)

    scanf("%d",&table[i][j]);

    if (!checkmate())

    printf("No\n");

    return 0;

    }

    展开全文
  • c语言五子棋.zip

    2020-12-12 13:48:40
    功能比较全面基于windows平台的五子棋,可以键盘移动光标空格落子,有人人对战和人机对战功能,同时可以选择电脑先后手,电脑无禁手规则,棋盘有简单颜色,大小为39x39,有不足的地方欢迎大家下载资源讨论交流。
  • VS Studio环境下的纯C语言五子棋代码。 写的很烂,大佬勿喷。
  • C语言五子棋--人机对弈--人人对弈

    千次阅读 2021-07-04 11:05:57
    C语言五子棋: 第一次实现可以进行人机对战的五子棋,分享下,难度不大。 主要可以实现人人对战(包含提示),和人机对战。人机 对战的算法也不难。 //仅供参考,可能有为完善的bug,概不负责 /*头文件*/ #include ...

    C语言五子棋:

    注:直接可以运行使用的代码,家人们的点赞在哪里
    第一次实现可以进行人机对战的五子棋,分享下,难度不大。都是按照模块来写的,封装成了很多个函数,比较细致,新手还是可以看懂的。主要可以实现人人对战(包含提示),和人机对战。人机
    对战的算法也不难。
    对应的模块都写成了函数,总体来说逻辑还是比较简单的,如果是想要知道人机对战是怎么实现的伙伴可以移步最后。其实还是蛮简单的,只是根据一定的计算公式去计算该位置的权(即价值),权高者即为当前认为的最优位置。
    还有伙伴反应,这个程序跑起来不对,甚至界面都不完整。那是因为使用了新版的命令窗口。切换到旧版的就是正确的了。

    切换到旧版的win命令窗口

    没有切换之前
    在这里插入图片描述

    切换过程
    在这里插入图片描述
    点击属性
    在这里插入图片描述
    在这里插入图片描述
    点击确定,重新启动,就正常了。
    在这里插入图片描述

    对应操作

    空格为下子。
    F1为提示,电脑下子
    按上下左右移动位置。

    //仅供参考,可能有为完善的bug,概不负责
    /*头文件*/    
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include<windows.h>			//控制dos界面
    #include <time.h>
    #include<math.h>
    /*宏定义*/ 
        #define MAXIMUS 15 //定义棋盘大小
    /*函数声明*/ 
    typedef struct{
        int x,y;
    }place;
    
        int p[MAXIMUS][MAXIMUS];//存储对局信息
        char buff[MAXIMUS*2+1][MAXIMUS*4+3];//输出缓冲器
        int Cx,Cy;//当前光标位置
        int Now;//当前走子的玩家,1代表黑,2代表白
        int wl,wp;//当前写入缓冲器的列数和行数位置
        char* showText;//在棋盘中央显示的文字信息
        int count;//回合数
        void explation();
        void gotoxy(int x,int y);
        int color(int c);
        int	RunGame();
        int RunRobotGame();
        
    place robot(){
    	place xy;
    
    	int power[MAXIMUS][MAXIMUS]={0}; 
    	for(int x =0;x <MAXIMUS;x++){
    		for(int y =0;y<MAXIMUS;y++){
    			int i=0;
    			int ix=1,iy=1,ir=1,ic=1;
    			int qx=0,qy=0,qr=0,qc=0;
    			if(p[x][y]==0){
    				
    				for(i=1;i<5;i++)
           			 	if(y+i<MAXIMUS&&p[x][y+i]==Now)
               				iy++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y+i]==0){
            					qy++;
    						} 
            				break;
    					} //向下检查
    				for(i=1;i<5;i++)
           			 	if(y-i>0&&p[x][y-i]==Now)
               				iy++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y-i]==0){
            					qy++;
    						} 
            				break;
    					}
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&p[x+i][y]==Now)
    			            ix++;
    			        else {
    			        	if(x+i<MAXIMUS&&p[x+i][y]==0){
    							qx++;
    						} 
    						break;
    					}
    			            //向右检查
    		   		 for(i=1;i<5;i++)
    		     	    if(x-i>0&&p[x-i][y]==Now)
    		           		ix++;
    		       	 else {
    			        	if(x-i>0&&p[x-i][y]==0){
    							qx++;
    						} 
    						break;
    					}
    		            //向左检查
    			    for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==Now)
    			            ir++;
    			        else{
    			        	if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==0){
    							qr++;
    						}
    						break;
    					} 
    			            //向右下检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y-i>0&&p[x-i][y-i]==Now)
    			            ir++;
    			        else{
    						if(x-i>0&&y-i>0&&p[x-i][y-i]==0){
    							qr++;
    						} 
    					} 
    			          //向左上检查
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==Now)
    			            ic++;
    			        else {
    						if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==0){
    							qc++;
    						}
    						break;
    					} 
    			           //向右上检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==Now)
    			            ic++;
    			        else{
    						if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==0){
    							qc++;
    						}
    						break;
    					}
    			            //向左下检查
    			            if(ir>=5||ic>=5||ix>=5||iy>=5){
    			            	xy.x=x;
    			            	xy.y=y;
    			            	return xy;
    						}
    					
    					
    					int tc=1,tx=1,ty=1,tr=1;
    					int qtc=0,qtr=0,qtx=0,qty=0;
    					for(i=1;i<5;i++)
           			 	if(y+i<MAXIMUS&&p[x][y+i]==3-Now)
               				ty++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y+i]==0){
            					qty++;
    						} 
            				break;
    					} //向下检查
    				for(i=1;i<5;i++)
           			 	if(y-i>0&&p[x][y-i]==3-Now)
               				ty++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y-i]==0){
            					qty++;
    						} 
            				break;
    					}
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&p[x+i][y]==3-Now)
    			            tx++;
    			        else {
    			        	if(x+i<MAXIMUS&&p[x+i][y]==0){
    							qtx++;
    						} 
    						break;
    					}
    			            //向右检查
    		   		 for(i=1;i<5;i++)
    		     	    if(x-i>0&&p[x-i][y]==3-Now)
    		           		tx++;
    		       	 else {
    			        	if(x-i>0&&p[x-i][y]==0){
    							qtx++;
    						} 
    						break;
    					}
    		            //向左检查
    			    for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==3-Now)
    			            tr++;
    			        else{
    			        	if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==0){
    							qtr++;
    						}
    						break;
    					} 
    			            //向右下检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y-i>0&&p[x-i][y-i]==3-Now)
    			            tr++;
    			        else{
    						if(x-i>0&&y-i>0&&p[x-i][y-i]==0){
    							qtr++;
    						} 
    					} 
    			          //向左上检查
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==3-Now)
    			            tc++;
    			        else {
    						if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==0){
    							qtc++;
    						}
    						break;
    					} 
    			           //向右上检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==3-Now)
    			            tc++;
    			        else{
    						if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==0){
    							qtc++;
    						}
    						break;
    						}
    //			if((ir>=4&&qr>0)||(ic>=4&&qc>0)||(ix>=4&&qx>0)||(iy>=4&&qy>0)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //				if((tr==3&&qtr==3)||(qc==3&&qtc==3)||(qx==3&&qtx==3)||(qy==3&&qty==3)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //				if((tr==4&&qtr>0)||(qc==4&&qtc>0)||(qx==4&&qtx>0)||(qy==4&&qty>0)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //			
    //				if((ir==3&&qr==2)||(ic==3&&qc==2)||(ix==3&&qx==2)||(iy==3&&qy==2)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //			
    //				if((tr==3&&qtr==2)||(tc==3&&qtc==2)||(tx==3&&qtx==2)||(ty==3&&qty==2)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    				
    				power[x][y]= pow(ix,ix)*qx+ pow(iy,iy)*qy+ pow(ir,ir)*qr+ pow(ic,ic)*qc+ pow(tx,tx)*qtx+ pow(ty,ty)*qty+ pow(tc,tc)*qtc+ pow(tr,tr)*qtr; 		
    			}
    		}
    	}
    	int max =0;
    	
    
    	for(int x =0;x <MAXIMUS;x++){
    		for(int y =0;y<MAXIMUS;y++){
    			if(power[x][y]>max){
    				max =power[x][y];
    				xy.x=x;
    				xy.y=y; 
    			} 
    		}
    	} 
    	return xy;
    }
    /**
     * 设置光标位置
     */
    void gotoxy(int x,int y)
    {
        COORD c;
        c.X=x;
        c.Y=y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
     /**
     * 文字颜色函数      此函数的局限性:1、只能Windows系统下使用   2、不能改变背景颜色
     */
    int color(int c)
    {
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色
    	return 0;
    }
    /**
     * 开始界面
     */
    void welcometogame()
    {
    	int n;
    	int i,j = 1;
    	gotoxy(23,2);
    	color(13);
    	printf("五 子 棋 游 戏");
    	color(15);          			//白色边框
    	for (i =6; i <= 12; i++)   	//输出上下边框┅
    	{
    		for (j = 7; j <= 54; j++)  //输出左右边框┇
    		{
    			gotoxy(j, i);
    			if (i == 6 || i == 12)
    			{
    				printf("--");
                }
    			else if (j == 7 || j == 54)
                {
    				printf("|");
                }
    		}
    	}
    	color(14);
    	gotoxy(15, 8);
    	printf("1.开始游戏");
    	gotoxy(35, 8);
    	printf("2.游戏说明");
    	gotoxy(15, 10);
    	printf("3.人机对战          4.退出游戏");
    	gotoxy(19,13);
    	color(12);
    	printf("请选择[1 2 3 4]:[ ]\b\b");        //\b为退格,使得光标处于[]中间
    	color(14);
        scanf("%d", &n);    		//输入选项
        switch (n)
        {
        	case 1:
        		system("cls");
    			RunGame();
            	break;
        	case 2:
                explation();
                break;
            case 3:
            	system("cls");
            	RunRobotGame();
            	break;
        	case 4:
            	exit(0);     		//退出游戏
            	break;
            
        }
    }
    
    //修改过的字符串复制函数,会忽略末端的\0
    char* Copy(char* strDest,const char* strSrc)
        {
        char* strDestCopy = strDest;
        while (*strSrc!='\0')
        {
        *strDest++=*strSrc++;
        }
        return strDestCopy;
        }
        //初始化一个对局函数
        void Initialize()
        {
        int i,j;//循环变量
        showText="";//重置显示信息
        count=0;//回合数归零
        for(i=0;i<MAXIMUS;i++)//重置对局数据
        {
    	    for(j=0;j<MAXIMUS;j++)
    	    {
    	    p[i][j]=0;
    	    }
        }
        Cx=Cy=MAXIMUS/2;//重置光标到中央	
        Now=1;//重置当前为黑方
        }
        //获得棋盘中指定坐标交点位置的字符,通过制表符拼成棋盘
        char* getStyle(int i,int j)
        {
        if(p[i][j]==1)//1为黑子
        return "●";
        else if(p[i][j]==2)//2为白子
        return "○";
        else if(i==0&&j==0)//以下为边缘棋盘样式
        return "┏";
        else if(i==MAXIMUS-1&&j==0)
        return "┓";
        else if(i==MAXIMUS-1&&j==MAXIMUS-1)
        return "┛";
        else if(i==0&&j==MAXIMUS-1)
        return "┗";
        else if(i==0)
        return "┠";
        else if(i==MAXIMUS-1)
        return "┨";
        else if(j==0)
        return "┯";
        else if(j==MAXIMUS-1)
        return "┷";
        return "┼";//中间的空位
        }
        //获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示
        char* getCurse(int i,int j)
        {
        if(i==Cx)
        {
    	    if(j==Cy)
    	    return "┏";
    	    else if (j==Cy+1)
    	    return "┗";
        }
        else if(i==Cx+1)
        {
    	    if(j==Cy)
    	    return "┓";
    	    else if (j==Cy+1)
    	    return "┛";
       }
        return "  ";//如果不在光标附近则为空
    }
        //向缓冲器写入字符串
    void write(char* c)
    {
        Copy(buff[wl]+wp,c);
        wp+=strlen(c);
    }
        //缓冲器写入位置提行
    void ln()
    {
        wl+=1;
        wp=0;
    }
        //将缓冲器内容输出到屏幕
    void Display()
    {
        int i,l=strlen(showText);//循环变量,中间文字信息的长度
        int Offset=MAXIMUS*2+2-l/2;//算出中间文字信息居中显示所在的横坐标位置
        if(Offset%2==1)//如果位置为奇数,则移动到偶数,避免混乱
        {
      	  Offset--;
        }
        Copy(buff[MAXIMUS]+Offset,showText);//讲中间文字信息复制到缓冲器
        if(l%2==1)//如果中间文字长度为半角奇数,则补上空格,避免混乱
        {
        	*(buff[MAXIMUS]+Offset+l)=0x20;
        }
        system("cls");//清理屏幕,准备写入
        for(i=0;i<MAXIMUS*2+1;i++){//循环写入每一行
    	    printf("%s",buff[i]);
    	    if(i<MAXIMUS*2)//写入完每一行需要换行
    	    printf("\n");
        }
    }
        //将整个棋盘算出并储存到缓冲器,然后调用Display函数显示出来
        void Print()
        {
        int i,j;//循环变量
        wl=0;
        wp=0;
        for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环
        {
        for(i=0;i<=MAXIMUS;i++)
        {
        write(getCurse(i,j));//写入左上角字符
        if(j==0||j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置
        {
        if(i!=MAXIMUS)
        write(" ");
        }
        else//如果在棋盘中间则用竖线承接上下
        {
        if(i==0||i==MAXIMUS-1)//左右边缘的竖线更粗
        write("┃");
        else if(i!=MAXIMUS)//中间的竖线
        write("│");
        }
        }
        if(j==MAXIMUS)//如果是最后一次循环,则只需要处理边侧字符,交点要少一排
        {
        break;
        }
        ln();//提行开始打印交点内容
        write(" ");//用空位补齐位置
        for(i=0;i<MAXIMUS;i++)//按横坐标循环正常的次数
        {
        write(getStyle(i,j));//写入交点字符
    	    if(i!=MAXIMUS-1)//如果不在最右侧则补充一个横线承接左右
    	    {
    		    if(j==0||j==MAXIMUS-1)
    		    {
    		    write("--");//上下边缘的横线更粗
    		    }
    		    else
    		    {
    		    write("--");//中间的横线
    		    }
    	    }
        }
        ln();//写完一行后提行
        }
        Display();//将缓冲器内容输出到屏幕
    }
    
    int Put()
    {//在当前光标位置走子,如果非空,则返回0表示失败
        if(p[Cx][Cy]==0)
        {
    	    p[Cx][Cy]=Now;//改变该位置数据
    	    return 1;//返回1表示成功
        }
        else
        {
       	 return 0;
        }
    }
        //胜负检查,即判断当前走子位置有没有造成五连珠的情况
    int Check()
    {
        int w=1,x=1,y=1,z=1,i;//累计横竖正斜反邪四个方向的连续相同棋子数目
        for(i=1;i<5;i++)
            if(Cy+i<MAXIMUS&&p[Cx][Cy+i]==Now)
                w++;
            else 
                break;//向下检查
        for(i=1;i<5;i++)
            if(Cy-i>0&&p[Cx][Cy-i]==Now)
                w++;
            else 
                break;//向上检查
        if(w>=5)
            return Now;//若果达到5个则判断当前走子玩家为赢家
        for(i=1;i<5;i++)
            if(Cx+i<MAXIMUS&&p[Cx+i][Cy]==Now)
                x++;
            else 
                break;//向右检查
        for(i=1;i<5;i++)
            if(Cx-i>0&&p[Cx-i][Cy]==Now)
                x++;
            else 
                break;//向左检查
        if(x>=5)
            return Now;//若果达到5个则判断当前走子玩家为赢家
        for(i=1;i<5;i++)
            if(Cx+i<MAXIMUS&&Cy+i<MAXIMUS&&p[Cx+i][Cy+i]==Now)
                y++;
            else
                break;//向右下检查
        for(i=1;i<5;i++)
            if(Cx-i>0&&Cy-i>0&&p[Cx-i][Cy-i]==Now)
                y++;
            else 
                break;//向左上检查
        if(y>=5)
            return Now;//若果达到5个则判断当前走子玩家为赢家
        for(i=1;i<5;i++)
            if(Cx+i<MAXIMUS&&Cy-i>0&&p[Cx+i][Cy-i]==Now)
                z++;
            else 
                break;//向右上检查
        for(i=1;i<5;i++)
            if(Cx-i>0&&Cy+i<MAXIMUS&&p[Cx-i][Cy+i]==Now)
                z++;
            else
                break;//向左下检查 if(z>=5)return Now;//若果达到5个则判断当前走子玩家为赢家
                if(z>=5) {
                	return Now;
    			}
        return 0;//若没有检查到五连珠,则返回0表示还没有玩家达成胜利
    }
        //进行整个对局,返回赢家信息(虽然有用上)
    int RunGame()
    {
        int input;//输入变量
        int victor;//赢家信息
        Initialize();//初始化对局
        while(1){//开始无限回合的死循环,直到出现胜利跳出
    	    Print();//打印棋盘
    	    input=getch();//等待键盘按下一个字符
    	    if(input==27)//如果是ESC则退出程序
    	    {
    	    exit(0);
    	    }else if(input==0){
    	    	input = getch();
    	    	if(input == 59){
    	    	
    	    	place pxy = robot();
    //	    	Cx = rand()%MAXIMUS;
    //	    	Cy = rand()%MAXIMUS;
    			
    			Cx = pxy.x;
    			Cy =pxy.y;
    	  		if(Put())//如果走子成功则判断胜负
    		    {
    			    victor=Check();
    			    Now=3-Now;//轮换当前走子玩家
    			    count++;
    			    if(victor==1)//如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    			    {
    				    showText="黑方获得了胜利!";
    				    Print();
    				    if(getch()==0xE0)
    				    {
    				    getch();
    				    }
    			  	    return Now;
    			    }
    			    else if(victor==2)//如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    			    {
    				    showText="白方获得了胜利!";
    				    Display();
    				    if(getch()==0xE0)
    				    {
    				    getch();
    				    }
    				    return Now;
    			    }else if(count==MAXIMUS*MAXIMUS)//如果回合数达到了棋盘总量,即棋盘充满,即为平局
    			    {
    				    showText="平局!";
    				    Display();
    				    if(getch()==0xE0)
    				    {
    				    getch();
    				    }
    				    return 0;
    			    }
    		    
    		    }
    			}
    	    
    		} 
    	    else if(input==0x20)//如果是空格则开始走子
    	    {
    		    if(Put())//如果走子成功则判断胜负
    		    {
    			    victor=Check();
    			    Now=3-Now;//轮换当前走子玩家
    			    count++;
    			    if(victor==1)//如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    			    {
    				    showText="黑方获得了胜利!";
    				    Print();
    				    if(getch()==0xE0)
    				    {
    				    	getch();
    				    }
    			  	    return Now;
    			    }
    			    else if(victor==2)//如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    			    {
    				    showText="白方获得了胜利!";
    				    Display();
    				    if(getch()==0xE0)
    				    {
    				    	getch();
    				    }
    				    return Now;
    			    }else if(count==MAXIMUS*MAXIMUS)//如果回合数达到了棋盘总量,即棋盘充满,即为平局
    			    {
    				    showText="平局!";
    				    Display();
    				    if(getch()==0xE0)
    				    {
    				    	getch();
    				    }
    				    return 0;
    			    }
    		    }
    	    }
    	    else if(input==0xE0)//如果按下的是方向键,会填充两次输入,第一次为0xE0表示按下的是控制键
    	    {
    		    input=getch();//获得第二次输入信息
    		    switch(input)//判断方向键方向并移动光标位置
    		    {
    		    case 0x4B:Cx--; break;
    		    case 0x48:Cy--;break;
    		    case 0x4D:Cx++;break;
    		    case 0x50:Cy++;break;
    		    }
    		    if(Cx<0)Cx=MAXIMUS-1;//如果标光位置越界则移动到对侧
    		    if(Cy<0)Cy=MAXIMUS-1; if(Cx>MAXIMUS-1)Cx=0;
    		    if(Cy>MAXIMUS-1)Cy=0;
    	    }
        }
    }
    
    
    int RunRobotGame()
    {
        int input;//输入变量
        int victor;//赢家信息
        Initialize();//初始化对局
        while(1){//开始无限回合的死循环,直到出现胜利跳出
    	    Print();//打印棋盘
    	    if(Now != 2)
    		{
    		 input=getch();//等待键盘按下一个字符
    	    	 if(input==27)//如果是ESC则退出程序
    		    {
    		    exit(0);
    		    }
    		    else if(input==0x20)//如果是空格则开始走子
    		    {
    			    if(Put())//如果走子成功则判断胜负
    			    {
    				    victor=Check();
    				    Now=3-Now;//轮换当前走子玩家
    				    count++;
    				    if(victor==1)//如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    				    {
    					    showText="黑方获得了胜利!";
    					    Print();
    					    if(getch()==0xE0)
    					    {
    					    	getch();
    					    }
    				  	    return Now;
    				    }
    				    else if(victor==2)//如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    				    {
    					    showText="白方获得了胜利!";
    					    Display();
    					    if(getch()==0xE0)
    					    {
    					    	getch();
    					    }
    					    return Now;
    				    }else if(count==MAXIMUS*MAXIMUS)//如果回合数达到了棋盘总量,即棋盘充满,即为平局
    				    {
    					    showText="平局!";
    					    Display();
    					    if(getch()==0xE0)
    					    {
    					    	getch();
    					    }
    					    return 0;
    				    }
    			    }
    		    }
    		    else if(input==0xE0)//如果按下的是方向键,会填充两次输入,第一次为0xE0表示按下的是控制键
    		    {
    			    input=getch();//获得第二次输入信息
    			    switch(input)//判断方向键方向并移动光标位置
    			    {
    			    case 0x4B:Cx--; break;
    			    case 0x48:Cy--;break;
    			    case 0x4D:Cx++;break;
    			    case 0x50:Cy++;break;
    			    }
    			    if(Cx<0)Cx=MAXIMUS-1;//如果标光位置越界则移动到对侧
    			    if(Cy<0)Cy=MAXIMUS-1; if(Cx>MAXIMUS-1)Cx=0;
    			    if(Cy>MAXIMUS-1)Cy=0;
    		    }
    		}
    		   
    		else
    		{
    			place pxy = robot();
    //	    	Cx = rand()%MAXIMUS;
    //	    	Cy = rand()%MAXIMUS;
    			
    			Cx = pxy.x;
    			Cy =pxy.y;
    	  		if(Put())//如果走子成功则判断胜负
    		    {
    			    victor=Check();
    			    Now=3-Now;//轮换当前走子玩家
    			    count++;
    			    if(victor==1)//如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    			    {
    				    showText="黑方获得了胜利!";
    				    Print();
    				    if(getch()==0xE0)
    				    {
    				    getch();
    				    }
    			  	    return Now;
    			    }
    			    else if(victor==2)//如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息
    			    {
    				    showText="白方获得了胜利!";
    				    Display();
    				    if(getch()==0xE0)
    				    {
    				    getch();
    				    }
    				    return Now;
    			    }else if(count==MAXIMUS*MAXIMUS)//如果回合数达到了棋盘总量,即棋盘充满,即为平局
    			    {
    				    showText="平局!";
    				    Display();
    				    if(getch()==0xE0)
    				    {
    				    getch();
    				    }
    				    return 0;
    			    }
    		    
    		    }
    		}
        }
    }
        /*
    *   游戏说明
    */
    void explation()
    {
    	int i,j = 1;
        system("cls");
        color(13);
        gotoxy(27,3);
        printf("游戏说明");
        color(5);
        for (i = 6; i <= 22; i++)   //输出上下边框===
    	{
    		for (j = 3; j <= 58; j++)  //输出左右边框||
    		{
    			gotoxy(j, i);
    			if (i == 6 || i == 22) printf("=");
    			else if (j == 3 || j == 58) printf("||");
    		}
    	}
        color(15);
        gotoxy(10,8);
        printf("tip1: 用↑.↓.←.→控制光标的位置");
        color(14);
        gotoxy(10,11);
        printf("tip2: 用空格键确定下棋子");
        color(12);
        gotoxy(10,14);
        printf("tip3: 黑白棋哪个先上下左右5个连在一起,得胜利");
        color(11);
        gotoxy(10,17);
        printf("tip4: 按<Esc>退出游戏");
        getch();                //按任意键返回主界面
        system("cls");
        welcometogame();
    }
    
    
    int main()//主函数
    {
       // system("color 2E");//设置颜色
       
        welcometogame();
       
        while(1)
        {//循环执行游戏
        RunGame();
        }
    	return 0;
    }
    
    

    计算位置权重的代码

    place robot(){
    	place xy;
    
    	int power[MAXIMUS][MAXIMUS]={0}; 
    	for(int x =0;x <MAXIMUS;x++){
    		for(int y =0;y<MAXIMUS;y++){
    			int i=0;
    			int ix=1,iy=1,ir=1,ic=1;
    			int qx=0,qy=0,qr=0,qc=0;
    			if(p[x][y]==0){
    				
    				for(i=1;i<5;i++)
           			 	if(y+i<MAXIMUS&&p[x][y+i]==Now)
               				iy++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y+i]==0){
            					qy++;
    						} 
            				break;
    					} //向下检查
    				for(i=1;i<5;i++)
           			 	if(y-i>0&&p[x][y-i]==Now)
               				iy++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y-i]==0){
            					qy++;
    						} 
            				break;
    					}
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&p[x+i][y]==Now)
    			            ix++;
    			        else {
    			        	if(x+i<MAXIMUS&&p[x+i][y]==0){
    							qx++;
    						} 
    						break;
    					}
    			            //向右检查
    		   		 for(i=1;i<5;i++)
    		     	    if(x-i>0&&p[x-i][y]==Now)
    		           		ix++;
    		       	 else {
    			        	if(x-i>0&&p[x-i][y]==0){
    							qx++;
    						} 
    						break;
    					}
    		            //向左检查
    			    for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==Now)
    			            ir++;
    			        else{
    			        	if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==0){
    							qr++;
    						}
    						break;
    					} 
    			            //向右下检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y-i>0&&p[x-i][y-i]==Now)
    			            ir++;
    			        else{
    						if(x-i>0&&y-i>0&&p[x-i][y-i]==0){
    							qr++;
    						} 
    					} 
    			          //向左上检查
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==Now)
    			            ic++;
    			        else {
    						if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==0){
    							qc++;
    						}
    						break;
    					} 
    			           //向右上检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==Now)
    			            ic++;
    			        else{
    						if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==0){
    							qc++;
    						}
    						break;
    					}
    			            //向左下检查
    			            if(ir>=5||ic>=5||ix>=5||iy>=5){
    			            	xy.x=x;
    			            	xy.y=y;
    			            	return xy;
    						}
    					
    					
    					int tc=1,tx=1,ty=1,tr=1;
    					int qtc=0,qtr=0,qtx=0,qty=0;
    					for(i=1;i<5;i++)
           			 	if(y+i<MAXIMUS&&p[x][y+i]==3-Now)
               				ty++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y+i]==0){
            					qty++;
    						} 
            				break;
    					} //向下检查
    				for(i=1;i<5;i++)
           			 	if(y-i>0&&p[x][y-i]==3-Now)
               				ty++;
            			else{
            				if(y+i<MAXIMUS&&p[x][y-i]==0){
            					qty++;
    						} 
            				break;
    					}
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&p[x+i][y]==3-Now)
    			            tx++;
    			        else {
    			        	if(x+i<MAXIMUS&&p[x+i][y]==0){
    							qtx++;
    						} 
    						break;
    					}
    			            //向右检查
    		   		 for(i=1;i<5;i++)
    		     	    if(x-i>0&&p[x-i][y]==3-Now)
    		           		tx++;
    		       	 else {
    			        	if(x-i>0&&p[x-i][y]==0){
    							qtx++;
    						} 
    						break;
    					}
    		            //向左检查
    			    for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==3-Now)
    			            tr++;
    			        else{
    			        	if(x+i<MAXIMUS&&y+i<MAXIMUS&&p[x+i][y+i]==0){
    							qtr++;
    						}
    						break;
    					} 
    			            //向右下检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y-i>0&&p[x-i][y-i]==3-Now)
    			            tr++;
    			        else{
    						if(x-i>0&&y-i>0&&p[x-i][y-i]==0){
    							qtr++;
    						} 
    					} 
    			          //向左上检查
    				for(i=1;i<5;i++)
    			        if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==3-Now)
    			            tc++;
    			        else {
    						if(x+i<MAXIMUS&&y-i>0&&p[x+i][y-i]==0){
    							qtc++;
    						}
    						break;
    					} 
    			           //向右上检查
    			    for(i=1;i<5;i++)
    			        if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==3-Now)
    			            tc++;
    			        else{
    						if(x-i>0&&y+i<MAXIMUS&&p[x-i][y+i]==0){
    							qtc++;
    						}
    						break;
    						}
    //			if((ir>=4&&qr>0)||(ic>=4&&qc>0)||(ix>=4&&qx>0)||(iy>=4&&qy>0)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //				if((tr==3&&qtr==3)||(qc==3&&qtc==3)||(qx==3&&qtx==3)||(qy==3&&qty==3)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //				if((tr==4&&qtr>0)||(qc==4&&qtc>0)||(qx==4&&qtx>0)||(qy==4&&qty>0)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //			
    //				if((ir==3&&qr==2)||(ic==3&&qc==2)||(ix==3&&qx==2)||(iy==3&&qy==2)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    //			
    //				if((tr==3&&qtr==2)||(tc==3&&qtc==2)||(tx==3&&qtx==2)||(ty==3&&qty==2)){
    //					xy.x = x;
    //					xy.y =y;
    //					return xy;
    //				}
    				
    				power[x][y]= pow(ix,ix)*qx+ pow(iy,iy)*qy+ pow(ir,ir)*qr+ pow(ic,ic)*qc+ pow(tx,tx)*qtx+ pow(ty,ty)*qty+ pow(tc,tc)*qtc+ pow(tr,tr)*qtr; 		
    			}
    		}
    	}
    	int max =0;
    	
    
    	for(int x =0;x <MAXIMUS;x++){
    		for(int y =0;y<MAXIMUS;y++){
    			if(power[x][y]>max){
    				max =power[x][y];
    				xy.x=x;
    				xy.y=y; 
    			} 
    		}
    	} 
    	return xy;
    }
    

    这个算法是返回最佳位置的,然后调用走棋的函数就实现了自动走棋和提示,其实很简单,就是依次判断该位置的上下左右斜线的8个方位,然后根据我不断调试得到的“高级权重计算公式”,得到了较为合理的走棋。其中被注释掉的是之前想要扩展的棋型,后面直接摆烂了。就由你们努力了。

    展开全文
  • c语言五子棋人机

    千次阅读 2020-06-25 17:29:12
    c语言五子棋人机声明:我是菜鸡游戏展示如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也...
  • C语言五子棋chess.c

    2021-04-08 20:14:32
    C语言五子棋代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,597
精华内容 1,438
关键字:

c语言五子棋