求一原创的c语言五子棋代码(会查重),要求人机对战,输入坐标对战即可,不需用鼠标点击,最好有禁手。

如题所述

第1个回答  2015-07-09
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//棋盘初始化函数
//Chessboard棋盘数组,ln=棋盘大小,成功返回Chessboard,不成功NULL
void init_Chessboard(char Chessboard[][7], int ln)
{
if ((Chessboard != NULL) && (ln>0)){
int i = 0, j = 0;
for (i = 0; i<ln; ++i){
for (j = 0; j<ln; ++j){
Chessboard[i][j] = '\t';
}
}
// return Chessboard;
}
// return NULL;
}
//未完待续追答

//显示棋盘函数
void show_Chessboard(char Chessboard[][7], int ln)
{
assert((Chessboard != NULL) && (ln > 0));

int i = 0, j = 0;
for (i = 0; i= 0) && (y >= 0)){
if ('\t' == Chessboard[x][y]){

Chessboard[x][y] = ChessPieces;
return 1; //成功
}
else
{
return 0;
}//end if2
}//end if1
return 0;
}
//未完待续

//满盘判断
//棋盘满了判断//满了就返回-1
int full_Chess(char Chessboard[][7], int ln)
{
int i = 0, j = 0;
for (i = 0; i 0));
if((XS =0) && (YS >=0)
&& (dx != 0 || dy != 0)) //坐标增量不为同时0
{

if (((XS + dx * 4) > ln) || ((XS + dx * 4)ln) || ((YS + dy * 4) < 0) || //在棋盘外
('\t' == Chessboard[XS][YS]))
{
return 0; //不在棋盘内,或者起点是没下子
}
else
{
int i = 0;
for (i = 1; i < 5; ++i){
if (Chessboard[XS][YS] != Chessboard[XS + (dx * i)][YS + (dy * i)])
{
return 0; //如果不是连续5个一样的
}//end if3
}//end for1
return 1; //五个都一样,且都在棋盘内
}//end if 2
}
return 0; //其他情况
}
//未完待续

追问

私信我吧~

追答

//裁判函数
//Chessboard 棋盘数组,ln=棋盘宽度
//赢了返回1,否则返回0
int judga(char Chessboard[][7], int ln)
{
assert((NULL != Chessboard) && (ln>0));
int i = 0, j = 0;
//纵向成五子连线判断
for (i = 0; i(ln-4); --i){
for (j = 0; j <(ln - 4); ++j){
if (judga_line(Chessboard, ln, i, j, -1, 1)){
return 1;
}
}//end for_j
}//end for_i

return 0; //没能赢
}
//未完的承诺

//裁判函数
//Chessboard 棋盘数组,ln=棋盘宽度
//赢了返回1,否则返回0
int judga(char Chessboard[][7], int ln)
{
assert((NULL != Chessboard) && (ln>0));
int i = 0, j = 0;
//纵向成五子连线判断
for (i = 0; i(ln-4); --i){
for (j = 0; j <(ln - 4); ++j){
if (judga_line(Chessboard, ln, i, j, -1, 1)){
return 1;
}
}//end for_j
}//end for_i

return 0; //没能赢
}
//未完的承诺

//主函数

int main()
{
char CB[7][7];
char nameA[50] = "玩家A";
char nameB[50] = "玩家B";
int x = -1, y = -1;
//初始化
init_Chessboard(CB, 7);

printf("请输入玩家A的名字:");
scanf("%s", nameA);

printf("请输入玩家B的名字:");
scanf("%s", nameB);

//显示棋盘
show_Chessboard(CB, 7);

while (1){
//判断是否棋盘已满
if (full_Chess(CB, 7)){
puts("\n棋盘已满,下次再战!");
break; //跳出最外层while
}//end if

//玩家A下子
while (1){
printf("\n请玩家 %s 下子 @\n", nameA);
printf("棋子行坐标X=");
scanf("%d", &x);
printf("棋子列坐标Y=");
scanf("%d", &y);

if (play(CB, 7, x, y, '@')){ //@ ascii=64
break; //下子成功
}
else
{
puts("下子失败,请重新选定位置下子");
continue; //下子不成功,重新下子
}//end if
}//end while A

//显示棋盘
show_Chessboard(CB, 7);

//判断玩家A是否胜利
if (judga(CB, 7)){
printf("\n恭喜玩家 %s 成功取得胜利!!鲜花\n", nameA);
getchar();
getchar();
break; //跳出最外层while
}//不用下了

//玩家B下子
while (1){
printf("\n请玩家 %s 下子 O\n", nameB);
printf("棋子行坐标X=");
scanf("%d", &x);
printf("棋子列坐标Y=");
scanf("%d", &y);

if ((play(CB, 7, x, y, 'O'))){ //O ascii=79
break; //下子成功
}
else
{
puts("下子失败,请重新选定位置下子");
continue; //下子不成功,重新下子
}//end if

}//end while B

//显示棋盘
show_Chessboard(CB, 7);

//判断玩家B是否胜利
if (judga(CB, 7)){
printf("\n恭喜玩家 %s 成功取得胜利!! 鲜花\n", nameA);
getchar();
getchar();
break; //跳出最外层while
}//不用下了

}

return 0;

}

已经发完,求采纳

已经发完,求采纳

追问

但你这个只能人人对战,不能人机啊,你有人机对战的代码吗?

追答

有,不过,太大了,在电脑上,明天才能给你,如果你想要的话

追问

嗯,明天私信我吧,如果能在VC++上运行的话就采纳

追答

(⊙_⊙)嗯(⊙_⊙)嗯(⊙_⊙)

hello在么

c语言五子棋人机对战
http://pan.baidu.com/share/link?shareid=1388225784&uk=291369328

追问

呃,你这不是原创的啊,网上早就有了

本回答被网友采纳
相似回答