用C语言实现三子棋

本文实例为大家分享了用C语言实现三子棋的具体代码,供大家参考,具体内容如下

三子棋含义:

三子棋是黑白棋的一种。三子棋又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。图例如下:

基本思路:

1.创建用户交互菜单界面

2.初始化棋盘

3.显示棋盘面板(为了不重复显示棋盘,使用清屏操作)

4.用户落子

5.判断胜负

6.电脑随机正确落子

7.判断胜负

(在每次写程序之前,可以向如下图所示,写出思路或伪代码

创建多文件项目:

写代码之前,首先建立三个文件,以方便后序代码更加完整清晰地呈现。

1.创建用户交互菜单界面

void Meau(){

printf("+------ meau ----------+\n");

printf("|---- 1.play --------|\n");

printf("|---- 0.quit --------|\n");

printf("+----------------------+\n");

}

2.初始化棋盘

使用宏定义,将棋盘中的内容初始化为空。

static void InitBoard(char board[][COL], int row, int col){

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

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

board[i][j] = INIT;

}

}

}

3.显示棋盘面板

为了不重复显示棋盘,使用清屏操作,使得每次现实的棋盘只有一张。

通过不断调试,使得最终界面,与预期所需界面一致。

static void ShowBoard(char board[][COL],int row,int col){

system("cls");//清屏操作

printf(" ");

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

printf(" %3d", i + 1);

}

printf("\n----------------\n");

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

printf("%-2d", i + 1);

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

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

}

printf("\n----------------\n");

}

}

4.用户落子

落子只能落在为空的位置上,所以在落子前需要判空,若为空,则落子,否则提示重新落子。

static void PlayerMove(char board[][COL], int row, int col){

int x = 0;

int y = 0;

while (1){

printf("please enter your postion<x,y>: ");

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

if (x<1 || x>3 || y<1 || y>3){

printf("Postion Error!");

continue;

}

if (board[x - 1][y - 1] == INIT){

board[x - 1][y - 1] = WHITE;

break;

}

else{

printf("Postion Is Not Empty!\n");

}

}

}

5.电脑随机正确落子

使用随机数,在正确位置落子。

static void ComputerMove(char board[][COL], int row, int col){

while (1){

int x = rand() % row;

int y = rand() % col;

if (board[x][y] == INIT){

board[x][y] = BLACK;

break;

}

}

}

6.判断胜负

static char IsEnd(char board[][COL], int row, int col){

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

if (board[i][0] == board[i][1] && \

board[i][1] == board[i][2] && \

board[i][0] != INIT){

return board[i][0];

}

}

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

if (board[0][j] == board[1][j] && \

board[1][j] == board[2][j] && \

board[0][j] != INIT){

return board[0][j];

}

}

if (board[0][0] == board[1][1] && \

board[1][1] == board[2][2] && \

board[0][0] != INIT){

return board[0][0];

}

if(board[0][2] == board[1][1] && \

board[1][1] == board[2][0] && \

board[1][1] != INIT){

return board[1][1];

}

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

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

if (board[i][j] == INIT);

return NEXT;

}

}

return DRAW;

}

7.创建Game界面

void Game()

{

char board[ROW][COL];

InitBoard(board, ROW, COL);

srand((unsigned long)time(NULL));

char result = 0;

while (1){

ShowBoard(board, ROW, COL);

PlayerMove(board, ROW, COL);

result = IsEnd(board, ROW, COL);

if (result != NEXT){

break;

}

ShowBoard(board, ROW, COL);

ComputerMove(board, ROW, COL);

result = IsEnd(board, ROW, COL);

if (result != NEXT){

break;

}

}

ShowBoard(board, ROW, COL);

switch (result){

case WHITE:

printf("You win!\n");

break;

case BLACK:

printf("you lose!\n");

break;

case DRAW:

printf("it ends in a draw\n");

break;

defult:

printf("bug\n");

break;

}

}

完整代码

//main.c文件

#include"game.h"

void Meau(){

printf("+------ meau ----------+\n");

printf("|---- 1.play --------|\n");

printf("|---- 0.quit --------|\n");

printf("+----------------------+\n");

}

int main(){

int select = 0;

int quit = 0;

while (!quit)

{

Meau();

printf("please enter your choose: ");

scanf("%d", &select);

switch (select)

{

case 1:

Game();

break;

case 0:

quit = 1;

break;

defult:

printf("Select error!Try again!\n");

break;

}

}

printf("byebye!\n");

system("pause");

return 0;

}

//game.c 文件

#include"game.h"

static void InitBoard(char board[][COL], int row, int col){

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

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

board[i][j] = INIT;

}

}

}

static void ShowBoard(char board[][COL],int row,int col){

system("cls");

printf(" ");

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

printf(" %3d", i + 1);

}

printf("\n----------------\n");

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

printf("%-2d", i + 1);

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

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

}

printf("\n----------------\n");

}

}

static char IsEnd(char board[][COL], int row, int col){

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

if (board[i][0] == board[i][1] && \

board[i][1] == board[i][2] && \

board[i][0] != INIT){

return board[i][0];

}

}

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

if (board[0][j] == board[1][j] && \

board[1][j] == board[2][j] && \

board[0][j] != INIT){

return board[0][j];

}

}

if (board[0][0] == board[1][1] && \

board[1][1] == board[2][2] && \

board[0][0] != INIT){

return board[0][0];

}

if(board[0][2] == board[1][1] && \

board[1][1] == board[2][0] && \

board[1][1] != INIT){

return board[1][1];

}

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

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

if (board[i][j] == INIT);

return NEXT;

}

}

return DRAW;

}

static void PlayerMove(char board[][COL], int row, int col){

int x = 0;

int y = 0;

while (1){

printf("please enter your postion<x,y>: ");

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

if (x<1 || x>3 || y<1 || y>3){

printf("Postion Error!");

continue;

}

if (board[x - 1][y - 1] == INIT){

board[x - 1][y - 1] = WHITE;

break;

}

else{

printf("Postion Is Not Empty!\n");

}

}

}

static void ComputerMove(char board[][COL], int row, int col){

while (1){

int x = rand() % row;

int y = rand() % col;

if (board[x][y] == INIT){

board[x][y] = BLACK;

break;

}

}

}

void Game()

{

char board[ROW][COL];

InitBoard(board, ROW, COL);

srand((unsigned long)time(NULL));

char result = 0;

while (1){

ShowBoard(board, ROW, COL);

PlayerMove(board, ROW, COL);

result = IsEnd(board, ROW, COL);

if (result != NEXT){

break;

}

ShowBoard(board, ROW, COL);

ComputerMove(board, ROW, COL);

result = IsEnd(board, ROW, COL);

if (result != NEXT){

break;

}

}

ShowBoard(board, ROW, COL);

switch (result){

case WHITE:

printf("You win!\n");

break;

case BLACK:

printf("you lose!\n");

break;

case DRAW:

printf("it ends in a draw\n");

break;

defult:

printf("bug\n");

break;

}

}

//game.h文件

#ifndef __GAME_H__

#define __GAME_H__

#include<stdio.h>

#include <time.h>

#include <stdlib.h>

#include<windows.h>

#pragma warning(disable:4996)

#define ROW 3

#define COL 3

#define INIT ' '

#define WHITE 'X'//player

#define BLACK 'O'//computer

#define DRAW 'D'

#define NEXT 'N'

extern void Game();

#endif

代码结果显示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 用C语言实现三子棋 的全部内容, 来源链接: utcz.com/p/246220.html

回到顶部