基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲
用C語(yǔ)言寫三子棋的具體代碼,供大家參考,具體內(nèi)容如下
1、頭文件
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //標(biāo)識(shí)符定義 #define ROW 3 #define COL 3 //函數(shù)定義 //棋盤初始化 void init_board(char board[ROW][COL], int row, int col); //打印棋盤 void display_board(char board[ROW][COL], int row, int col); //玩家下棋 void player_game(char board[ROW][COL], int row, int col); //電腦下棋 void comeputer_game(char board[ROW][COL], int row, int col); //判斷輸贏 char is_win(char board[ROW][COL], int row, int col);
2、游戲函數(shù)
#include "game.h"
//棋盤初始化
void init_board(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 display_board(char board[ROW][COL], int row, int col) {
?? ?int i = 0;
?? ?int j = 0;
?? ?int k = 0;
?? ?for (i = 0; i < ROW; i++) {
?? ??? ?for (j = 0; j < COL; j++) {
?? ??? ??? ?printf(" %c ",board[i][j]);
?? ??? ??? ?if (j < COL - 1) {
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?if (i < ROW - 1) {
?? ??? ??? ?for (k = 0; k < COL; k++) {
?? ??? ??? ??? ?printf("---");
?? ??? ??? ??? ?if (k < COL - 1) {
?? ??? ??? ??? ??? ?printf("|");
?? ??? ??? ??? ?}
?? ??? ??? ?}?? ??? ??? ??? ?
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}
//玩家下棋
void player_game(char board[ROW][COL], int row, int col) {
?? ?int x = 0;
?? ?int y = 0;
?? ?while (1)
?? ?{
?? ??? ?printf("請(qǐng)輸入你要落子的坐標(biāo)>:");
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (x <= row && y <= col && x >= 1 && y >= 1) {
?? ??? ??? ?if (board[x - 1][y - 1] == ' ') {
?? ??? ??? ??? ?board[x - 1][y - 1] = '*';
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?else {
?? ??? ??? ??? ?printf("你輸入的坐標(biāo)被占用!\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?else {
?? ??? ??? ?printf("你輸入的坐標(biāo)有誤,請(qǐng)重新輸入!\n");
?? ??? ?}
?? ?}?? ?
}
//電腦下棋
void comeputer_game(char board[ROW][COL], int row, int col) {
?? ?while (1) {
?? ??? ?int x = rand() % row;
?? ??? ?int y = rand() % col;
?? ??? ?if (board[x][y] == ' ') {
?? ??? ??? ?board[x][y] = '#';
?? ??? ??? ?break;
?? ??? ?}
?? ?}?? ?
}
//判斷輸贏
//1.玩家贏返回*
//2.電腦贏返回#
//3.雙方都不贏,棋盤沒(méi)有位置平局返回p
//4.雙方都不贏,棋盤還有位置繼續(xù)下棋返回c
char is_win(char board[ROW][COL], int row, int col) {
?? ?int x = 0;
?? ?int y = 0;?? ??
?? ?//判斷行
?? ?for (x = 0; x < row; x++) {
?? ??? ?if (board[x][0] == board[x][1] && board[x][1] == board[x][2] && board[x][1] != ' ') {
?? ??? ??? ?return board[x][1];
?? ??? ?}?? ??? ?
?? ?}
?? ?//判斷列
?? ?for (y = 0; y < col; y++) {
?? ??? ?if (board[0][y] == board[1][y] && board[1][y] == board[2][y] && board[1][y] != ' ') {
?? ??? ??? ?return board[1][y];
?? ??? ?}?? ??? ?
?? ?}
?? ?//判斷對(duì)角線
?? ?if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') {
?? ??? ?return board[1][1];
?? ?}?
?? ?if (board[2][0] == board[1][1] && board[1][1] == board[1][2] && board[1][1] != ' ') {
?? ??? ?return board[1][1];
?? ?}
?? ?//判斷棋盤是否有空位
?? ?for (x = 0; x < row; x++) {
?? ??? ?for (y = 0; y < col; y++) {
?? ??? ??? ?if (board[x][y] == ' ') {
?? ??? ??? ??? ?return 'c';
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 'p';
}3、游戲?qū)崿F(xiàn)
#include "game.h"
//打印菜單
void menu() {
?? ?printf("***************************\n");
?? ?printf("********* 三 子 棋 ********\n");
?? ?printf("********* 1. play ?********\n");
?? ?printf("********* 0. exit ?********\n");
?? ?printf("***************************\n");
}
void game() {
?? ?char win = 0;
?? ?//定義棋盤存儲(chǔ)
?? ?char board[ROW][COL];
?? ?//棋盤初始化
?? ?init_board(board, ROW, COL);
?? ?//打印棋盤
?? ?display_board(board, ROW, COL);
?? ?while (1) {
?? ??? ?//玩家下棋
?? ??? ?player_game(board, ROW, COL);
?? ??? ?display_board(board, ROW, COL);
?? ??? ?//判斷輸贏
?? ??? ?win = is_win(board, ROW, COL);
?? ??? ?if (win != 'c') {
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?//電腦下棋
?? ??? ?comeputer_game(board, ROW, COL);
?? ??? ?display_board(board, ROW, COL);
?? ??? ?//判斷輸贏
?? ??? ?win = is_win(board, ROW, COL);
?? ??? ?if (win != 'c') {
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if (win == '*') {
?? ??? ?printf("恭喜玩家勝利!\n");
?? ??? ?display_board(board, ROW, COL);
?? ??? ?system("pause");
?? ?}
?? ?else if (win == '#') {
?? ??? ?printf("電腦勝利,繼續(xù)加油喲!\n");
?? ??? ?display_board(board, ROW, COL);
?? ??? ?system("pause");
?? ?}
?? ?else {
?? ??? ?printf("平局\n");
?? ??? ?display_board(board, ROW, COL);
?? ??? ?system("pause");
?? ?}
} ?
int main(void) {
?? ?
?? ?int num = 0;
?? ?srand((unsigned)time(NULL));
?? ?do {
?? ??? ?//打印菜單
?? ??? ?menu();
?? ??? ?//選擇菜單
?? ??? ?printf("請(qǐng)選擇菜單>:");
?? ??? ?scanf("%d", &num);
?? ??? ?switch (num)
?? ??? ?{
?? ??? ?case 0:
?? ??? ??? ?break;
?? ??? ?case 1:
?? ??? ??? ?game();
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?printf("你的選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?}
?? ?} while (num);
?? ?
?? ?system("pause");
?? ?return 0;
}效果圖片

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++使用郵件槽實(shí)現(xiàn)ShellCode跨進(jìn)程傳輸
在計(jì)算機(jī)安全領(lǐng)域,進(jìn)程間通信(IPC)一直是一個(gè)備受關(guān)注的話題,在本文中,我們將探討如何使用Windows郵件槽(Mailslot)實(shí)現(xiàn)ShellCode的跨進(jìn)程傳輸,需要的可以參考下2023-12-12
C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理初學(xué)者容易犯的6個(gè)錯(cuò)誤分享
本篇文章主要介紹了初學(xué)者使用C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理的4個(gè)函數(shù)時(shí)最容易犯的6個(gè)錯(cuò)誤,以及如何避免這些錯(cuò)誤,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-04-04
C++11的函數(shù)包裝器std::function使用示例
C++11引入的std::function是最常用的函數(shù)包裝器,它可以存儲(chǔ)任何可調(diào)用對(duì)象并提供統(tǒng)一的調(diào)用接口,以下是關(guān)于函數(shù)包裝器的詳細(xì)講解,包括它的基本用法、特點(diǎn)、限制、以及與其他相關(guān)機(jī)制的對(duì)比2024-12-12
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉鏈表創(chuàng)建二叉樹
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之?二叉鏈表創(chuàng)建二叉樹,下文我們?yōu)榱烁奖愕氖褂枚鏄浣Y(jié)構(gòu)體,可以使用?typedef?對(duì)結(jié)構(gòu)體進(jìn)行命名,具體內(nèi)容需要的小伙伴可以參考一下2022-02-02
Linux中使用C語(yǔ)言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例
這篇文章主要介紹了Linux中使用C語(yǔ)言實(shí)現(xiàn)基于UDP協(xié)議的socket通信示例,服務(wù)器端與客戶端的功能都非常基礎(chǔ),需要的朋友可以參考下2016-03-03
C語(yǔ)言巧用二分查找實(shí)現(xiàn)猜數(shù)游戲
二分查找也稱折半查找(Binary?Search),它是一種效率較高的查找方法。但是,折半查找要求線性表必須采用順序存儲(chǔ)結(jié)構(gòu),而且表中元素按關(guān)鍵字有序排列,本篇文章教你用二分查找編寫猜數(shù)字游戲2022-02-02

