parent
c3a447ccbd
commit
3e943319b4
|
@ -0,0 +1,32 @@
|
|||
# Project: Èý×ÓÆå
|
||||
# Makefile created by Dev-C++ 6.7.5
|
||||
|
||||
CPP = g++.exe -D__DEBUG__
|
||||
CC = gcc.exe -D__DEBUG__
|
||||
WINDRES = windres.exe
|
||||
OBJ = test.o game.o
|
||||
LINKOBJ = test.o game.o
|
||||
LIBS = -L"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/" -L"d:/files/software/dev-cpp/mingw32/lib/gcc/" -L"d:/files/software/dev-cpp/mingw32/mingw32/lib/" -L"d:/files/software/dev-cpp/mingw32/lib/" -L"D:/files/software/Dev-Cpp/MinGW32/lib" -L"D:/files/software/Dev-Cpp/MinGW32/mingw32/lib" -g3 -static
|
||||
INCS = -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include" -I"d:/files/software/dev-cpp/mingw32/include" -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include-fixed"
|
||||
CXXINCS = -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include/c++" -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include/c++/mingw32" -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include/c++/backward" -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include" -I"d:/files/software/dev-cpp/mingw32/include" -I"d:/files/software/dev-cpp/mingw32/lib/gcc/mingw32/9.2.0/include-fixed"
|
||||
BIN = Èý×ÓÆå.exe
|
||||
CXXFLAGS = $(CXXINCS) -Wall -Wextra -g3
|
||||
ENCODINGS = -finput-charset=utf-8 -fexec-charset=gbk
|
||||
CFLAGS = $(INCS) -Wall -Wextra -g3
|
||||
RM = del /q /f
|
||||
|
||||
.PHONY: all all-before all-after clean clean-custom
|
||||
|
||||
all: all-before $(BIN) all-after
|
||||
|
||||
clean: clean-custom
|
||||
${RM} $(OBJ) $(BIN)
|
||||
|
||||
$(BIN): $(OBJ)
|
||||
$(CC) $(LINKOBJ) -o "$(BIN)" $(LIBS)
|
||||
|
||||
test.o: test.c game.h
|
||||
$(CC) -c test.c -o test.o $(CFLAGS)
|
||||
|
||||
game.o: game.c game.h
|
||||
$(CC) -c game.c -o game.o $(CFLAGS)
|
|
@ -0,0 +1,116 @@
|
|||
#include "game.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++){
|
||||
int j = 0;
|
||||
for(j = 0;j < col;j++){
|
||||
printf(" %c ",board[i][j]);
|
||||
if(j < col -1)
|
||||
printf("|");
|
||||
}
|
||||
printf("\n");
|
||||
if(i < row -1){
|
||||
int j = 0;
|
||||
for(j = 0;j< col;j++){
|
||||
printf("---");
|
||||
if(j < col -1)
|
||||
printf("|");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
//玩家走
|
||||
void playMove(char board[][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("坐标被占用,请重新输入\n");
|
||||
}
|
||||
}else{
|
||||
printf("坐标非法,请重新输入\n");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//电脑走
|
||||
void computerMove(char board[][COL],int row,int col){
|
||||
printf("电脑走\n");
|
||||
while(1){
|
||||
int x = rand() % ROW;
|
||||
int y = rand() % COL;
|
||||
//判断位置是否被占用
|
||||
if(board[x][y] == ' '){
|
||||
board[x][y] = '#';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断棋盘是否满了
|
||||
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;
|
||||
//判断三行
|
||||
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< col;i++){
|
||||
if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){
|
||||
return board[1][i];
|
||||
}
|
||||
}
|
||||
//判断对角线
|
||||
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];
|
||||
}
|
||||
//判断平局
|
||||
//棋盘满返回1不满返回0
|
||||
int ret = isFull(board,row,col);
|
||||
if(ret == 1){
|
||||
return 'Q';
|
||||
}
|
||||
//继续
|
||||
return 'C';
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
//头文件
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
//符号的定义
|
||||
#define ROW 3
|
||||
#define COL 3
|
||||
|
||||
//函数的声明
|
||||
|
||||
//初始化棋盘
|
||||
void initBiard(char board[ROW][COL],int row,int col);
|
||||
|
||||
//打印棋盘的函数
|
||||
void displayBoard(char board[ROW][COL],int row,int col);
|
||||
|
||||
//玩家下棋
|
||||
void playMove(char board[ROW][COL],int row,int col);
|
||||
|
||||
//电脑下棋
|
||||
void computerMove(char board[][COL],int row,int col);
|
||||
|
||||
//判断游戏结果
|
||||
//1. 玩家赢了 -- *
|
||||
//2. 电脑赢了 -- #
|
||||
//3. 平局 -- Q
|
||||
//4. 游戏继续 -- C
|
||||
char isWin(char board[ROW][COL],int row,int col);
|
Binary file not shown.
|
@ -0,0 +1,74 @@
|
|||
//test.c 测试游戏的逻辑
|
||||
//game.h关于游戏相关的函数声明,符号声明头文件的包含
|
||||
//game.c 游戏相关函数的实现
|
||||
#include "game.h"
|
||||
void menu(){
|
||||
printf("*************************\n");
|
||||
printf("**** 1.play **********\n");
|
||||
printf("**** 0.exit **********\n");
|
||||
printf("*************************\n");
|
||||
|
||||
}
|
||||
void game(){
|
||||
|
||||
//存储数据---二维数组
|
||||
char board[ROW][COL];
|
||||
|
||||
//初始化棋盘 -- 初始化空格
|
||||
initBoard(board,ROW,COL);
|
||||
|
||||
//打印棋盘 本质是打印数组内容
|
||||
displayBoard(board,ROW,COL);
|
||||
|
||||
char ret = 0;//接收游戏状态
|
||||
while(1){
|
||||
|
||||
//玩家走
|
||||
playMove(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{
|
||||
menu();
|
||||
printf("请选择:>");
|
||||
scanf("%d",&input);
|
||||
switch(input){
|
||||
case 1:
|
||||
game();
|
||||
break;
|
||||
case 0:
|
||||
printf("退出游戏!\n");
|
||||
break;
|
||||
default:
|
||||
printf("选择错误,重新选择!\n");
|
||||
break;
|
||||
}
|
||||
}while(input);
|
||||
return 0;
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1,93 @@
|
|||
[Project]
|
||||
FileName=三子棋.dev
|
||||
Name=三子棋
|
||||
UnitCount=3
|
||||
Type=1
|
||||
Ver=2
|
||||
ObjFiles=
|
||||
Includes=
|
||||
Libs=
|
||||
PrivateResource=
|
||||
ResourceIncludes=
|
||||
MakeIncludes=
|
||||
Compiler=
|
||||
CppCompiler=
|
||||
Linker=
|
||||
IsCpp=0
|
||||
Icon=
|
||||
ExeOutput=
|
||||
ObjectOutput=
|
||||
LogOutput=
|
||||
LogOutputEnabled=0
|
||||
OverrideOutput=0
|
||||
OverrideOutputName=
|
||||
HostApplication=
|
||||
UseCustomMakefile=0
|
||||
CustomMakefile=
|
||||
UsePrecompiledHeader=0
|
||||
PrecompiledHeader=
|
||||
CommandLine=
|
||||
Folders=头文件,源文件
|
||||
IncludeVersionInfo=0
|
||||
SupportXPThemes=0
|
||||
CompilerSet=1
|
||||
CompilerSettings=0000000000110000000001000
|
||||
StaticLink=1
|
||||
AddCharset=1
|
||||
UseUTF8=0
|
||||
|
||||
[Unit1]
|
||||
FileName=test.c
|
||||
Folder=源文件
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
DetectEncoding=0
|
||||
Encoding=0
|
||||
CompileCpp=0
|
||||
|
||||
[VersionInfo]
|
||||
Major=1
|
||||
Minor=0
|
||||
Release=0
|
||||
Build=0
|
||||
LanguageID=1033
|
||||
CharsetID=1252
|
||||
CompanyName=
|
||||
FileVersion=
|
||||
FileDescription=Developed using the Dev-C++ IDE
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=
|
||||
AutoIncBuildNr=0
|
||||
SyncProduct=1
|
||||
|
||||
[Unit2]
|
||||
FileName=game.c
|
||||
CompileCpp=0
|
||||
Folder=源文件
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
DetectEncoding=0
|
||||
Encoding=0
|
||||
|
||||
[Unit3]
|
||||
FileName=game.h
|
||||
CompileCpp=0
|
||||
Folder=头文件
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
DetectEncoding=0
|
||||
Encoding=0
|
||||
|
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
[Editors]
|
||||
Order=0,2,1
|
||||
Focused=0
|
||||
[Editor_0]
|
||||
CursorCol=2
|
||||
CursorRow=44
|
||||
TopLine=1
|
||||
LeftChar=1
|
||||
[Editor_1]
|
||||
CursorCol=15
|
||||
CursorRow=110
|
||||
TopLine=62
|
||||
LeftChar=1
|
||||
[Editor_2]
|
||||
CursorCol=14
|
||||
CursorRow=7
|
||||
TopLine=2
|
||||
LeftChar=1
|
Binary file not shown.
Loading…
Reference in New Issue