C語(yǔ)言實(shí)現(xiàn)三子棋小游戲(vs2013多文件)
本文通過(guò)實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)三子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下
基本思路:
1.創(chuàng)建一個(gè)游戲選擇面板.
2.創(chuàng)建并初始化棋盤(pán)。
3.玩家落子并判定,電腦落子并判定。
4.判定結(jié)果 ,游戲結(jié)束!
代碼如下:
頭文件:
#pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4996) extern void Game();//游戲代碼需要定義調(diào)用的函數(shù) #define ROW 3//FOW、FOL代表三子棋邊界的長(zhǎng)和寬 #define COL 3 #define INIT ' ' //INIT為空格的宏定義 #define WHITE 'X' //X在三字棋代表Player #define BLACK 'O' //O在三字棋代表Computer #define DRAW 'D' //DRAW代表平局 #define NEXT 'N' //NEXT代表繼續(xù) //MineClearence
各類(lèi)函數(shù):
void InitBoard(char board[][COL], int row, int col)//棋盤(pán)初始化
{
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
board[i][j] = INIT;
}
}
}
static void ShowBoard(char board[][COL], int row, int col)//顯示棋盤(pán)
{
system("cls");
printf(" ");
for (int i = 0; i < col; i++){
printf("%4d", i + 1);
}
printf("\n--------------\n");
for (int i = 0; i < row; i++){
printf("%-2d", i + 1); //2
for (int j = 0; j < col; j++){
printf("| %c ", board[i][j]);
}
printf("\n--------------\n");
}
}
static char IsEnd(char board[][COL], int row, int col)//最終結(jié)果
{
for (int i = 0; i < row; i++){
if (board[i][0] == board[i][1] &&
board[i][1] == board[i][2] &&
board[i][0] != INIT){
return board[i][0];
}
}
for (int j = 0; j < COL; j++){
if (board[0][j] == board[1][j] &&
board[1][j] == board[2][j] &&
board[0][j] != INIT){
return board[0][j];
}
}
if (board[0][0] == board[1][1] &&
board[1][1] == board[2][2] &&
board[1][1] != INIT){
return board[1][1]; }
if (board[0][2] == board[1][1] &&
board[1][1] == board[2][0] &&
board[1][1] != INIT){
return board[1][1]; }
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (board[i][j] == INIT){
return NEXT;
}
}
}
return DRAW;
}
static void PlayerMove(char board[][COL], int row, int col)//玩家
{ int x = 0; int y = 0;
while (1){
printf("Please Enter Postion<x,y># ");
scanf("%d %d", &x, &y);
if (x < 1 || y < 1 || x > 3 || y > 3){
printf("Enter Postion Error!\n");
continue;
}
if (board[x - 1][y - 1] == INIT){
board[x - 1][y - 1] = WHITE;
break;
}
else{
printf("Postion Is Not Empty!\n");
}
}
}
static void ComputerMove(char board[][COL], int row, int col)//電腦
{
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == INIT){
board[x][y] = BLACK;
break;
}
}
}
void Game()
{
char board[ROW][COL];
InitBoard(board, ROW, COL);
srand((unsigned long)time(NULL));
char result = 0;
while (1){
ShowBoard(board, ROW,COL);
PlayerMove(board, ROW,COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
ShowBoard(board, ROW, COL);
ComputerMove(board,ROW, COL);
result = IsEnd(board, ROW,COL);
if (result != NEXT){
break;
}
}
ShowBoard(board, ROW,COL);
switch (result){
case WHITE:
printf("You Win!\n");
break;
case BLACK:
printf("You Lose!\n");
break;
case DRAW:
printf("You == Computer!\n");
break;
default:
printf("BUG!\n");
break;
}
}
游戲選擇面板(主函數(shù))
#include "game.h"
static void Menu()
{
printf("|------------- 開(kāi)始游戲 -------------|\n");
printf("+------------- 1. Play -------------+\n");
printf("+------------- 0. Exit -------------+\n");
}
int main()
{
int select = 0;
int quit = 0;
while (!quit){
Menu();
printf("Please Select#");
scanf("%d",&select);
switch (select){
case 1:
Game();
break;
case 0:
quit = 1;
break;
default:
printf("Enter Error, Try Again!\n");
break;
}
}
printf("bye!\n");
system("pause");
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C/C++實(shí)現(xiàn)矩陣的轉(zhuǎn)置(示例代碼)
C/C++實(shí)現(xiàn)矩陣的轉(zhuǎn)置(示例代碼)需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10
C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例
這篇文章主要為大家介紹了C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
C++設(shè)計(jì)與實(shí)現(xiàn)ORM系統(tǒng)實(shí)例詳解
這篇文章主要為大家介紹了C++設(shè)計(jì)與實(shí)現(xiàn)ORM系統(tǒng)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
C語(yǔ)言中#define預(yù)處理語(yǔ)法總結(jié)
C語(yǔ)言里可以用#define定義一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量。特點(diǎn)是:定義的標(biāo)識(shí)符不占內(nèi)存,只是一個(gè)臨時(shí)的符號(hào),預(yù)編譯后這個(gè)符號(hào)就不存在了,也不做類(lèi)型定義。預(yù)編譯又叫預(yù)處理2021-11-11
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之順序表和單鏈表
在數(shù)據(jù)結(jié)構(gòu)中,線性表是入門(mén)級(jí)數(shù)據(jù)結(jié)構(gòu),線性表又分為順序表和鏈表,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之順序表和單鏈表的相關(guān)資料,需要的朋友可以參考下2021-06-06
如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本
這篇文章主要介紹了如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本的方法,需要的朋友可以參考下2021-04-04
Qt編寫(xiě)地圖遷徙圖的實(shí)現(xiàn)示例
本文主要介紹了Qt編寫(xiě)地圖遷徙圖的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

