超简易c语言三子棋小游戏hah

今天来做一个三子棋小游戏。

首先,做出游戏开始界面:


int menu(void){
    printf("............................\n");
    printf("..........1  play ..........\n");
    printf("..........0  exit ..........\n");
    printf("............................\n");
    printf("choose>");
    int choose;
    scanf_s("%d", &choose);
    return choose;
}
int main(){
    int choose = 0;

    do{
        choose = menu();
        switch (choose){
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("choose error");
            break;
        }

    } while (1);

    system("pause");
}

简易界面:
就是这样:
接下来画棋盘:

void DisplayBoard(char arr[ROW][COL], int row, int col)
{
    int i, j;
    printf("\n----------------\n");
    for (i = 0; i < row; i++){
        printf("|");
        for (j = 0; j < col; j++){
            printf("%2c |", arr[i][j]);
        }
        printf("\n----------------\n");
    }
}

void InitBoard(char arr[ROW][COL], int row, int col){
    int i, j;
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++){
            arr[i][j] = ' ';
        }
    }
    memset(arr, ' ', row*col*sizeof(arr[0][0]));
}

如图:棋盘出来
开始设计人和计算机的走法:

void ComputerMove(char arr[ROW][COL], int row, int col)
{
    do{
        printf("computer go:");
        int y = rand() % row;
        int x = rand() % col;

        if (arr[y][x] == ' '){
            arr[y][x] = 'X';
            break;
        }
    } while (1);
}
void PlayerMove(char arr[ROW][COL], int row, int col)
{
    printf("人下棋(x y):");
    int x, y;
    while (1){
        scanf_s("%d%d", &x, &y);
        if ((x >=1 && x <= 3) && (0 <=y && y <= 3)){
            if (arr[y-1][x-1] == ' '){
                arr[y-1][x-1] = '0';
                break;
            }
            else{
                printf("you que ding location is right? ");
            }
        }
        else{
            printf("棋子放天上去了...go on..\n");
        }
    }
}

人和计算机每下一步判断一下输赢:

void game(void){
    char board[ROW][COL] = { 0 };
    char ret=0;
    InitBoard(board, ROW, COL);
    srand((unsigned)time(NULL));

    do
    {
        ComputerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if (ret != 'o')
            break;
        PlayerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret=IsWin(board, ROW, COL);
    } while (ret == 'o');
    if (ret == 'X'){
        printf("you loss\n");
    }
     if (ret == '0'){
        printf("you win\n");
    }
     if (ret == 'Q'){
        printf("just so so...\n");
    }
}

计算机win:
这里写图片描述
判断是否下满或者游戏结束 ,平局

static int IsFull(char arr[ROW][COL], int row, int col){
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++){
            if ((arr[i][j]) == ' ')
                return 0;
        }
    }
    return 1;
}

char IsWin(char arr[ROW][COL], int row, int col) {
    int i;
    for (i = 0; i < row; i++){
        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')
        {
            return arr[i][1];
        }
    }
    for (i = 0; i < col; i++){
        if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ')
        {
            return arr[1][i];
        }
    }
    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
    {
        return arr[1][1];
    }
    if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[1][1] != ' ')
    {
        return arr[1][1];
    }
    if (IsFull(arr, row, col)){
        return 'Q';
    }
    return 'o';
}

这个游戏所用到的对象和函数库:

#ifndef ___SANZIQI_H__
#define ___SANZIQI_H__

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>


#define ROW 3
#define COL 3

void InitBoard(char arr[ROW][COL], int row, int col);
void DisplayBoard(char arr[ROW][COL], int row, int col);
void ComputerMove(char arr[ROW][COL], int row, int col);
void PlayerMove(char arr[ROW][COL], int row, int col);
char IsWin(char arr[ROW][COL], int row, int col); 

#endif 

好了 ,做出三个模块,把各个模块凭借起来:
sanziqi.h:

#ifndef ___SANZIQI_H__
#define ___SANZIQI_H__

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>


#define ROW 3
#define COL 3

void InitBoard(char arr[ROW][COL], int row, int col);
void DisplayBoard(char arr[ROW][COL], int row, int col);
void ComputerMove(char arr[ROW][COL], int row, int col);
void PlayerMove(char arr[ROW][COL], int row, int col);
char IsWin(char arr[ROW][COL], int row, int col); 

#endif 

main.c

#include<stdio.h>
#include<stdlib.h>
#include"sanziqi.h"
/*  测试驱动开发
    1.谈需要,需求文档
    2.设计文档
    3.编码
    4.测试
    5.运维    瀑布模型 */

int menu(void){
    printf("............................\n");
    printf("..........1  play ..........\n");
    printf("..........0  exit ..........\n");
    printf("............................\n");
    printf("choose>");
    int choose;
    scanf_s("%d", &choose);
    return choose;
}

void game(void){
    char board[ROW][COL] = { 0 };
    char ret=0;
    InitBoard(board, ROW, COL);
    srand((unsigned)time(NULL));

    do
    {
        ComputerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if (ret != 'o')
            break;
        PlayerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret=IsWin(board, ROW, COL);
    } while (ret == 'o');
    if (ret == 'X'){
        printf("you loss\n");
    }
     if (ret == '0'){
        printf("you win\n");
    }
     if (ret == 'Q'){
        printf("just so so...\n");
    }
}


int main(){
    int choose = 0;

    do{
        choose = menu();
        switch (choose){
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("choose error");
            break;
        }

    } while (1);

    system("pause");
}

sanziqi.c:

#include"sanziqi.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>



void DisplayBoard(char arr[ROW][COL], int row, int col)
{
    int i, j;
    printf("\n----------------\n");
    for (i = 0; i < row; i++){
        printf("|");
        for (j = 0; j < col; j++){
            printf("%2c |", arr[i][j]);
        }
        printf("\n----------------\n");
    }
}

void InitBoard(char arr[ROW][COL], int row, int col){
    int i, j;
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++){
            arr[i][j] = ' ';
        }
    }
    memset(arr, ' ', row*col*sizeof(arr[0][0]));
}


void ComputerMove(char arr[ROW][COL], int row, int col)
{
    do{
        printf("computer go:");
        int y = rand() % row;
        int x = rand() % col;

        if (arr[y][x] == ' '){
            arr[y][x] = 'X';
            break;
        }
    } while (1);
}
void PlayerMove(char arr[ROW][COL], int row, int col)
{
    printf("人下棋(x y):");
    int x, y;
    while (1){
        scanf_s("%d%d", &x, &y);
        if ((x >=1 && x <= 3) && (0 <=y && y <= 3)){
            if (arr[y-1][x-1] == ' '){
                arr[y-1][x-1] = '0';
                break;
            }
            else{
                printf("you que ding location is right? ");
            }
        }
        else{
            printf("棋子放天上去了...go on..\n");
        }
    }
}
static int IsFull(char arr[ROW][COL], int row, int col){
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++){
            if ((arr[i][j]) == ' ')
                return 0;
        }
    }
    return 1;
}

char IsWin(char arr[ROW][COL], int row, int col) {
    int i;
    for (i = 0; i < row; i++){
        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')
        {
            return arr[i][1];
        }
    }
    for (i = 0; i < col; i++){
        if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ')
        {
            return arr[1][i];
        }
    }
    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
    {
        return arr[1][1];
    }
    if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[1][1] != ' ')
    {
        return arr[1][1];
    }
    if (IsFull(arr, row, col)){
        return 'Q';
    }
    return 'o';
}

嘿嘿 ,写完了玩一把:这里写图片描述

好了 ,到这三子棋就写完了,如果有更好的想法和意见请加qq294636185,欢迎一起交流学习。。。

猜你喜欢

转载自blog.csdn.net/xy294636185/article/details/79859164
今日推荐