今天来做一个三子棋小游戏。
首先,做出游戏开始界面:
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,欢迎一起交流学习。。。