【小游戏】三子棋
来源:互联网 发布:java上传图片回显 编辑:程序博客网 时间:2024/06/04 17:46
【C语言】实现最简单的三子棋
无人工智能,界面简单,手动输入坐标X X
代码如下 环境:VS2015
game.h
#pragma once#ifndef __GAME_H__#define __GAME_H__#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#define ROW 3#define COL 3void init_board(char board[ROW][COL], int row, int col); //棋盘数组初始化void display_board(char board[ROW][COL], int row, int col); //棋盘封装显示void player_board(char board[ROW][COL], int row, int col); //棋手下棋void comp_board(char board[ROW][COL], int row, int col); //机器下棋int jud_win(char board[ROW][COL], int row, int col); //判断输赢int jud_full(char board[ROW][COL], int row, int col); //判断下满#endif //__GAME_H__
game.c
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void init_board(char board[ROW][COL], int row, int col) //棋盘数组初始化{memset(board, ' ', ROW*COL*sizeof(char)); //初始化为空格}void display_board(char board[ROW][COL], int row, int col) //棋盘封装显示{int i = 0;for (i = 0; i < row; i++){printf(" %c | %c | %c \n",board[i][0], board[i][1], board[i][2]);if (i != 2)printf("---|---|---\n");}}void player_board(char board[ROW][COL], int row, int col) //棋手下棋{int x = 0;int y = 0;ret:printf("请输入坐标:>");scanf("%d%d", &x, &y);x = x - 1;y = y - 1;if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2))){if (board[x][y] == ' '){board[x][y] = '0';}else{printf("输入有误,");goto ret;}}else{printf("输入有误,"); goto ret;}system("cls");display_board(board, ROW, COL);if (jud_win(board, ROW, COL) == 1)//判断输赢...{printf("很强大!你赢了~\n");}else if (jud_win(board, ROW, COL) == 3){printf("呵呵~下平了..\n");}else comp_board(board, ROW, COL);}void comp_board(char board[ROW][COL], int row, int col) //机器下棋{srand((unsigned int)time(NULL)); //求随机数while(1){int x = rand() % 3; //随机数取模3int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = 'X';break;}}system("cls");printf("电脑已下:>\n");display_board(board, ROW, COL);if (jud_win(board, ROW, COL) == 2)//判断输赢...{printf("呵呵~你输了=。=\n");}else if (jud_win(board, ROW, COL) == 3){printf("呵呵~下平了..\n");}else player_board(board, ROW, COL);}int jud_win(char board[ROW][COL], int row, int col)//判断输赢{int i = 0;for (i = 0; i < row; i++) //玩家行判断{if ((board[i][0]) == (board[i][1]) && (board[i][1]) == (board[i][2]) && (board[i][0]) == '0')return 1;}for (i = 0; i < row; i++) //机器行判断{if ((board[i][0]) == (board[i][1]) && (board[i][1]) == (board[i][2]) && (board[i][0]) == 'X')return 2;}for (i = 0; i < col; i++) //玩家列判断{if ((board[0][i]) == (board[1][i]) && (board[1][i]) == (board[2][i]) && (board[0][i]) == '0')return 1;}for (i = 0; i < col; i++) //机器列判断{if ((board[0][i]) == (board[1][i]) && (board[1][i]) == (board[2][i]) && (board[0][i]) == 'X')return 2;}if ((board[0][0]) == (board[1][1]) && (board[1][1]) == (board[2][2]) && (board[0][0]) == '0')return 1; //玩家斜判断if ((board[0][2]) == (board[1][1]) && (board[1][1]) == (board[2][0]) && (board[0][2]) == '0')return 1;if ((board[0][0]) == (board[1][1]) && (board[1][1]) == (board[2][2]) && (board[0][0]) == 'X')return 2; //机器斜判断if ((board[0][2]) == (board[1][1]) && (board[1][1]) == (board[2][0]) && (board[0][2]) == 'X')return 2;if(jud_full(board, ROW, COL))return 3;}int jud_full(char board[ROW][COL], int row, int col) //判断下满{int x = 0;int y = 0;for (x = 0; x < row; x++){for (y = 0; y < col; y++)if (board[x][y] == ' ')return 0;}return 1;}
test.c
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){printf("***********************\n");printf("****1.play 0.exit******\n");printf("***********************\n");}void menu2(){printf("***********************\n");printf("****1.先下 2.后下******\n");printf("***********************\n");}void game(){int j = 0;srand((unsigned int)time(NULL));//int a = rand() % 2;char board[ROW][COL];init_board(board, ROW, COL);//棋盘数组初始化menu2(); //先后选择printf("请选择:>");scanf("%d", &j);switch (j){case 1:system("cls");printf("你的棋子为'0':>\n");display_board(board, ROW, COL);//棋盘封装player_board(board, ROW, COL);//棋手下...break;case 2:system("cls");comp_board(board, ROW, COL);//电脑下...break;default:printf("输入有误");break;}//display_board(board, ROW, COL);//棋盘封装}int main(){int i = 0;//srand((unsigned int)time(NULL)); do{menu();printf("请选择:>");scanf("%d", &i);switch (i){case 1:system("cls");game();break;case 0:system("cls");printf("****GAME OVER****\n");break;default:printf("输入有误,请重新输入。");break;}} while (i != 0);return 0;}
0 0
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 【小游戏】三子棋
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 小游戏:三子棋
- 三子棋小游戏
- 三子棋小游戏
- 三子棋 小游戏
- C语言小游戏"三子棋"
- 超级小游戏:三子棋
- 三子棋小游戏的实现
- MFC单文档之基于MSCOMM的多个编辑框的串口通讯
- Struts2中的ModelDriven机制及其运用
- Java DOM解析XML的几个例子
- 黑白图像
- 理解Python的With语句
- 【小游戏】三子棋
- 在linux下挂载硬盘
- 算法相关文章索引(2)
- 作业2
- JZOJ 3749. 【Srm590】Fox And City(fox)
- laravel 5.2.45版本中遇到的一个关于session的问题
- oracle查询被锁住的会话的sid,serial#,pid
- 简单猜数字游戏
- 用VNC从WIN7远程桌面显示Ubuntu 看到两个桌面问题解决。