使用VSC++2010
较为简单,适合新手攻略(纯纯的C语言)
#define CRT SECURE NO WARNINGS
#include"game.h"
#include<stdio.h>void manu()
{
?? ?printf("************************************\n");
?? ?printf("************************************\n");
?? ?printf("******* ?1 . play ? 0 .exit ********\n");
?? ?printf("************************************\n");
?? ?printf("************************************\n");
}void game()
{
?? ?char ret = 0;
?? ?char board[ROW][COL]={0};
?? ?
?? ?InitBoard(board, ROW, COL);//初始化棋盘的函数
?? ?DisplayBoard(board, ROW, COL);//打印棋盘的函数
?? ?//开始下棋的函数
?? ?while(1)
?? ?{
?? ??? ?PlayerMove(board, ROW, COL);//玩家下棋
?? ? ? ?DisplayBoard(board, ROW, COL);//显示棋盘
?? ??? ?ret = IsWin(board, ROW, COL);//判断输赢
?? ??? ?if(ret != 'C')
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ? ? ?ComputerMove(board, ROW, COL);//电脑下棋
?? ? ? ?DisplayBoard(board, ROW, COL);//显示棋盘
?? ??? ?ret = IsWin(board, ROW, COL);//判断输赢
?? ??? ?if(ret != 'C')
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if(ret == '*')
?? ?{
?? ??? ?printf("玩家赢了\n");
?? ?}
?? ?else if(ret == '#')
?? ?{
?? ??? ?printf("电脑赢了\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("平局\n");
?? ?}
?? ?/*DisplayBoard(board, ROW, COL);*/
}int main()
{
?? ?int input = 0;
?? ?srand((unsigned int)time(NULL));//设置随机数的生成起点
?? ?do
?? ?{
?? ??? ?manu();//打印菜单
?? ??? ?printf("请选择:>");
?? ??? ?scanf("%d",&input);
?? ??? ?switch(input)
?? ??? ?{
?? ??? ?case 1:
?? ??? ??? ?game();//printf("三子棋\n");三子棋的游戏
?? ??? ??? ?break;
?? ??? ?case 0:
?? ??? ??? ?printf("退出游戏\n");
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?printf("选择错误,请重新选择\n");
?? ??? ??? ?break;
?? ??? ?}?? ?}while(input);
?? ?return 0;
}#define CRT SECURE NO WARNINGS #include"game.h" #include<stdio.h> void manu() { ?? ?printf("************************************\n"); ?? ?printf("************************************\n"); ?? ?printf("******* ?1 . play ? 0 .exit ********\n"); ?? ?printf("************************************\n"); ?? ?printf("************************************\n"); } void game() { ?? ?char ret = 0; ?? ?char board[ROW][COL]={0}; ?? ? ?? ?InitBoard(board, ROW, COL);//初始化棋盘的函数 ?? ?DisplayBoard(board, ROW, COL);//打印棋盘的函数 ?? ?//开始下棋的函数 ?? ?while(1) ?? ?{ ?? ??? ?PlayerMove(board, ROW, COL);//玩家下棋 ?? ? ? ?DisplayBoard(board, ROW, COL);//显示棋盘 ?? ??? ?ret = IsWin(board, ROW, COL);//判断输赢 ?? ??? ?if(ret != 'C') ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ? ? ?ComputerMove(board, ROW, COL);//电脑下棋 ?? ? ? ?DisplayBoard(board, ROW, COL);//显示棋盘 ?? ??? ?ret = IsWin(board, ROW, COL);//判断输赢 ?? ??? ?if(ret != 'C') ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?if(ret == '*') ?? ?{ ?? ??? ?printf("玩家赢了\n"); ?? ?} ?? ?else if(ret == '#') ?? ?{ ?? ??? ?printf("电脑赢了\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("平局\n"); ?? ?} ?? ?/*DisplayBoard(board, ROW, COL);*/ } int main() { ?? ?int input = 0; ?? ?srand((unsigned int)time(NULL));//设置随机数的生成起点 ?? ?do ?? ?{ ?? ??? ?manu();//打印菜单 ?? ??? ?printf("请选择:>"); ?? ??? ?scanf("%d",&input); ?? ??? ?switch(input) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?game();//printf("三子棋\n");三子棋的游戏 ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?printf("退出游戏\n"); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("选择错误,请重新选择\n"); ?? ??? ??? ?break; ?? ??? ?} ?? ?}while(input); ?? ?return 0; }
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 3
#define COL 3//初始化棋盘
void InitBoard(char board[ROW][COL],int row,int col);//void InitBoard(char board[3][3],int row,int col);//打印棋盘
void DisplayBoard(char board[ROW][COL],int row,int col);//玩家下棋
void PlayerMove(char board[ROW][COL],int row,int col);//电脑下棋
//找没有下的地方随机下
void ComputerMove(char board[ROW][COL],int row,int col);//
//玩家赢---*
//电脑赢---#
//平局---Q
//继续---C
//
char IsWin(char board[ROW][COL],int row,int col);
?
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
//初始化棋盘
void InitBoard(char board[ROW][COL],int row,int col);//void InitBoard(char board[3][3],int row,int col);
//打印棋盘
void DisplayBoard(char board[ROW][COL],int row,int col);
//玩家下棋
void PlayerMove(char board[ROW][COL],int row,int col);
//电脑下棋
//找没有下的地方随机下
void ComputerMove(char board[ROW][COL],int row,int col);
//
//玩家赢---*
//电脑赢---#
//平局---Q
//继续---C
//
char IsWin(char board[ROW][COL],int row,int col);
?
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
#include<stdio.h>void InitBoard(char board[ROW][COL],int row,int col)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?for(i = 0;i<row;i++)
?? ?{
?? ??? ?for(j = 0;j<col;j++)
?? ??? ?{
?? ??? ??? ?board[i][j] = ' ';
?? ??? ?}
?? ?}
}//第一个版本
//void DisplayBoard(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<row-1)
//?? ??? ??? ?printf("---|---|---\n");
//?? ?}
//}//第二个版本
void DisplayBoard(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]);
?? ??? ?int j = 0;
?? ??? ?for(j=0;j<col;j++)
?? ??? ?{
?? ??? ??? ?printf(" %c ",board[i][j]);
?? ??? ??? ?if(j<col-1)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?//打印分割行
?? ??? ?/*printf("---|---|---\n");*/
?? ??? ?if(i<row-1)
?? ??? ?{
?? ??? ??? ?int j = 0;
?? ??? ??? ?for(j=0;j<col;j++)
?? ??? ??? ?{
?? ??? ??? ?printf("---");
?? ??? ??? ?if(j<col-1)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?printf("\n");
?? ??? ?}?? ??? ?
?? ?}
}
void PlayerMove(char board[ROW][COL],int row,int col)
{
?? ?int x = 0;
?? ?int y = 0;
?? ?printf("玩家下棋:>\n");
?? ?while(1)
?? ?{
?? ??? ?printf("请输入坐标\n");
?? ? ? ?scanf("%d%d",&x,&y);
?? ? ? ?//坐标合法性的判断
?? ? ? ?if( x>=1 && x<=row && y>=1 && y<=col)
?? ? ? ?{
?? ??? ??? ?if(board[x-1][y-1]==' ')
?? ??? ? ? ?{
?? ??? ??? ??? ?board[x-1][y-1]='*';
?? ??? ??? ??? ?break;
?? ??? ? ? ?}
?? ??? ? ? ?else
?? ??? ? ? ?{
?? ??? ??? ??? ?printf("已占用,请重新选择");
?? ??? ? ? ?}
?? ? ? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("坐标非法,请重新输入\n");
?? ? ? ?}
?? ?}
}void ComputerMove(char board[ROW][COL],int row,int col)
{
?? ?int x = 0;
?? ?int y = 0;//C语言中,printf语句后再定义会报错的原因是因为C语言是一种静态类型语言,它要求在使用变量之前必须先进行声明!!!
?? ?printf("电脑下棋:>\n");
?? ?while(1)
?? ?{
?? ??? ?int x = rand()%row;//0~row-1 随机数?
?? ??? ?int y = rand()%col;//0~col-1随机数
?? ??? ?if(board[x][y] == ' ')
?? ??? ?{
?? ??? ??? ?board[x][y] = '#';
?? ??? ??? ?break;
?? ??? ?}
?? ?}
}//满了返回1
//不满返回0
int IsFull(char board[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(board[i][j]==' ')
?? ??? ??? ??? ?return 0;
?? ??? ?}
?? ?}?? ?return 1;
}
char IsWin(char board[ROW][COL],int row,int col)
{
?? ?//行
?? ?int i = 0;
?? ?int j = 0;
?? ?for(i = 0 ;i < row ; i++)
?? ?{
?? ??? ?if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')
?? ??? ?{
?? ??? ??? ?return board[i][1];
?? ??? ?}
?? ?}?? ?/*for(i = 0;i < row;i++)
?? ?{
?? ??? ?for(j = 0;j < col;j++)
?? ??? ?{
?? ??? ??? ?if(board[i][j] == board[i][j+1]&&board[i][j] != ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return board[i][j];
?? ??? ??? ?}
?? ??? ?}
?? ?}*/
?? ?//列
?? ?for(j = 0;j < col ; j++)
?? ?{
?? ??? ?if(board[0][j]==board[1][j]&&board[1][j]==board[2][j]&&board[1][j]!=' ')
?? ??? ?{
?? ??? ??? ?return board[1][j];
?? ??? ?}
?? ?}?? ?//for(j = 0;j < col;j++)
?? ?//{
?? ?//?? ?for(i = 0;i < row;i++)
?? ?//?? ?{
?? ?//?? ??? ?if(board[i][j] == board[i+1][j]&&board[i][j] != ' ')
?? ?//?? ??? ?{
?? ?//?? ??? ??? ?return board[i][j];
?? ?//?? ??? ?}
?? ?//?? ?}
?? ?//}?? ?//对角线
?? ?if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')
?? ?{
?? ??? ?return board[1][1];
?? ?}
?? ?if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=' ')
?? ?{
?? ??? ?return board[1][1];
?? ?}?? ?/*for(j = 0;j < col;j++)
?? ?{
?? ??? ?for(i = 0;i < row;i++)
?? ??? ?{
?? ??? ??? ?if(i == j&&board[i][j] == board[i+1][j+1]&&board[i][j] != ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return board[i][j];
?? ??? ??? ?}
?? ??? ?}
?? ?}*/
?? ?//没有人赢,要平局
?? ?if(IsFull(board, ROW, COL))
?? ?{
?? ??? ?return 'Q';
?? ?}
?? ?//游戏继续
?? ?return 'C';
}#define _CRT_SECURE_NO_WARNINGS #include"game.h" #include<stdio.h> void InitBoard(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for(i = 0;i<row;i++) { for(j = 0;j<col;j++) { board[i][j] = ' '; } } } //第一个版本 //void DisplayBoard(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<row-1) // printf("---|---|---\n"); // } //} //第二个版本 void DisplayBoard(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]); int j = 0; for(j=0;j<col;j++) { printf(" %c ",board[i][j]); if(j<col-1) { printf("|"); } } printf("\n"); //打印分割行 /*printf("---|---|---\n");*/ if(i<row-1) { int j = 0; for(j=0;j<col;j++) { printf("---"); if(j<col-1) { printf("|"); } } printf("\n"); } } } void PlayerMove(char board[ROW][COL],int row,int col) { int x = 0; int y = 0; printf("玩家下棋:>\n"); while(1) { printf("请输入坐标\n"); scanf("%d%d",&x,&y); //坐标合法性的判断 if( x>=1 && x<=row && y>=1 && y<=col) { if(board[x-1][y-1]==' ') { board[x-1][y-1]='*'; break; } else { printf("已占用,请重新选择"); } } else { printf("坐标非法,请重新输入\n"); } } } void ComputerMove(char board[ROW][COL],int row,int col) { int x = 0; int y = 0;//C语言中,printf语句后再定义会报错的原因是因为C语言是一种静态类型语言,它要求在使用变量之前必须先进行声明!!! printf("电脑下棋:>\n"); while(1) { int x = rand()%row;//0~row-1 随机数 int y = rand()%col;//0~col-1随机数 if(board[x][y] == ' ') { board[x][y] = '#'; break; } } } //满了返回1 //不满返回0 int IsFull(char board[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(board[i][j]==' ') return 0; } } return 1; } char IsWin(char board[ROW][COL],int row,int col) { //行 int i = 0; int j = 0; for(i = 0 ;i < row ; i++) { if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ') { return board[i][1]; } } /*for(i = 0;i < row;i++) { for(j = 0;j < col;j++) { if(board[i][j] == board[i][j+1]&&board[i][j] != ' ') { return board[i][j]; } } }*/ //列 for(j = 0;j < col ; j++) { if(board[0][j]==board[1][j]&&board[1][j]==board[2][j]&&board[1][j]!=' ') { return board[1][j]; } } //for(j = 0;j < col;j++) //{ // for(i = 0;i < row;i++) // { // if(board[i][j] == board[i+1][j]&&board[i][j] != ' ') // { // return board[i][j]; // } // } //} //对角线 if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ') { return board[1][1]; } if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=' ') { return board[1][1]; } /*for(j = 0;j < col;j++) { for(i = 0;i < row;i++) { if(i == j&&board[i][j] == board[i+1][j+1]&&board[i][j] != ' ') { return board[i][j]; } } }*/ //没有人赢,要平局 if(IsFull(board, ROW, COL)) { return 'Q'; } //游戏继续 return 'C'; }
游戏还是有点不完善,我想把三子棋变成多子棋,后期会花时间继续完善
也希望大佬们帮帮我
我磕上两个? ? 咚—咚—
谢谢啦