欢迎光临散文网 会员登陆 & 注册

C语言程序设计从入门到进阶【比特鹏哥c语言2023完整版视频教程】(c语言基础入

2023-04-09 15:14 作者:把我也送回家好不好  | 我要投稿

//无智商人机实现n子棋

//有智商的人机可否提供代码

//复制可运行

#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>


#include <stdlib.h>


#include <time.h>


//表格行,列


#define ROW 10


#define COL 10


//几子连接则胜


#define GAME 5


//初始化数组


void InitArr(char arr[ROW][COL], int row, int col)


{


for (int i = 0; i < row; i++)


{


for (int j = 0; j < col; j++)


{


arr[i][j] = ' ';


}


}


}


//打印棋盘


void DisplayArr(char arr[ROW][COL], int row, int col)


{


for (int i = 0; i < row; i++)


{


for (int j = 0; j < col; j++)


{


if (j == col - 1) {


printf(" %c \n", arr[i][j]);


}


else {


printf(" %c |", arr[i][j]);


}


}


if (i == row - 1) continue;


for (int j = 0; j < col; j++)


{


if (j == col - 1) {


printf("---\n");


}


else {


printf("---|");


}


}


}


}




//判断输赢


int IsWin(char arr[ROW][COL], int x, int y)


{


//行


int right = 1;


int left = 1;


//列


int down = 1;


int up = 1;


//左斜


int rightup = 1;


int leftdown = 1;


//右斜


int leftup = 1;


int rightdown = 1;


//行


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


{


if (y + i <= COL && arr[x][y] == arr[x][y + i]) {


left++;


}


else


{


break;


}


}


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


{


if (y - j >= 0 && arr[x][y] == arr[x][y - j]) {


right++;


}


else


{


break;


}


}


if (right + left - 1 >= GAME) {


return 1;


}


//列


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


{


if (x + i <= ROW && arr[x][y] == arr[x + i][y]) {


down++;


}


else


{


break;


}


}


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


{


if (x - j >= 0 && arr[x][y] == arr[x - j][y]) {


up++;


}


else


{


break;


}


}


if (down + up - 1 >= GAME) {


return 1;


}


//左斜


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


{


if (x + i <= ROW && y + i <= COL && arr[x][y] == arr[x + i][y + i]) {


leftdown++;


}


else


{


break;


}


}


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


{


if (x - j >= 0 && y - j >= 0 && arr[x][y] == arr[x - j][y - j]) {


rightup++;


}


else


{


break;


}


}


if (leftdown + rightup - 1 >= GAME) {


return 1;


}


//右斜


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


{


if (x + i <= ROW && y - i >= 0 && arr[x][y] == arr[x + i][y - i]) {


rightdown++;


}


else


{


break;


}


}


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


{


if (x - j >= 0 && y + j <= COL && arr[x][y] == arr[x - j][y + j]) {


leftup++;


}


else


{


break;


}


}


if (rightdown + leftup - 1 >= GAME) {


return 1;


}


return 0;


}


//判断是否平局


int IsDraw(char arr[ROW][COL]) {


for (int i = 0; i < ROW; i++) {


for (int j = 0; j < COL; j++) {


if (arr[i][j] == ' ') {


return 0;


}


}


}


printf("游戏结束>\n平局");


return 1;


}

//玩家下棋


int PlayerMove(char arr[ROW][COL], int row, int col)


{


while (1)


{


printf("玩家下棋>\n请输入坐标> ");


int x;


int y;


scanf("%d %d", &x, &y);


if (arr[x - 1][y - 1] == ' ' && x >= 1 && x <= row && y >= 1 && y <= col) {


arr[x - 1][y - 1] = '*';


int a = IsWin(arr, x - 1, y - 1);


if (a) {


printf("玩家赢!!!!!!\n");


return 0;


}


if (IsDraw(arr)) {


return 0;


}


return 1;


}


else


{


printf("坐标错误或者被占用,重新输入\n");


}


}


}


//电脑下棋


int ComputerMove(char arr[ROW][COL], int row, int col)


{


printf("电脑下棋>\n");


while (1)


{


int x;


int y;


x = rand() % row;


y = rand() % col;


if (arr[x][y] == ' ') {


arr[x][y] = '#';


int a = IsWin(arr, x, y);


if (a) {


printf("电脑赢!!!!!!\n");


return 0;


}


if (IsDraw(arr)) {


return 0;


}


return 1;


}


}


}






void playgame() {


char arr[ROW][COL] = { 0 };


//初始化数组


InitArr(arr, ROW, COL);


//打印棋盘


DisplayArr(arr, ROW, COL);


//开始


while (1)


{


//玩家下棋


int playnum = PlayerMove(arr, ROW, COL);


DisplayArr(arr, ROW, COL);


if (!playnum) {


break;


}


//电脑下棋


int computernum = ComputerMove(arr, ROW, COL);


DisplayArr(arr, ROW, COL);


if (!computernum) {


break;


}


}


}




int main() {


int choose;


srand((unsigned int)time(NULL));


do {


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


printf("**********1.play**********\n");


printf("**********0.exit**********\n");


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


printf("请选择>");


scanf("%d", &choose);


switch (choose)


{


case 1:


playgame();


break;


case 0:


printf("退出游戏成功");


break;


default:


printf("输入数字错误,重新输入!\n");


break;


}


} while (choose);


return 0;


}

C语言程序设计从入门到进阶【比特鹏哥c语言2023完整版视频教程】(c语言基础入的评论 (共 条)

分享到微博请遵守国家法律