本文實例為大家分享了C語言實現三子棋小游戲的具體代碼,供大家參考,具體內容如下
設計思路
三子棋的C語言設計的思路:
1.設計一個界面:讓玩家運行后即可以看到一個界面,而此時界面需要一個讓玩家選擇的語句,即可以選擇玩游戲或者退出操作。界面設計需要swich語句的實現,退出游戲設計選項為0,即可以當選擇退出游戲時直接退出while(循環),即結束游戲。
2.游戲實現:當玩家選擇玩游戲時,調用啟動游戲的函數,而在游戲中,應當有的內容有:
(1)游戲內的棋盤設計:三子棋應當是三行三列的一個棋盤,通過函數打印出來。
(2)玩家的移動:玩家輸入相應的坐標然后將屬于玩家的標記打印在棋盤上,且電腦不能在同一位置打印。
(3)電腦的移動:電腦應隨即控制,即調用rand函數,使用time和時間隨機。
(4)輸贏的處理:這里需要給出判斷輸贏的條件:即任意一行或一列或對角線相同即為贏,通過標記的符號來判斷玩家贏還是電腦贏,如果棋盤放滿且仍未判斷出輸贏,則為平局。
(5)函數的調用處理:在函數調用時,每走一步,應打印出相對應的棋盤供玩家觀看,定義一個頭文件直接將所需函數的頭文件以及所需要的定義的行列常量,函數聲明放在里面,在代碼中只需用COL和ROW表示即可,需要修改棋盤的時候,只需修改頭文件中的define所定義的COL以及ROW。
代碼實現:
首先是游戲的界面代碼:直接用printf打印出來即可
1
2
3
4
5
6
7
|
void meun() { printf ( "****************\n" ); printf ( "*****0.Exit*****\n" ); printf ( "*****1.Play*****\n" ); printf ( "****************\n" ); } |
然后設計出三子棋的棋盤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
void ShowBoard( char board[][COL], int row, int col) { for ( int i = 0; i < row; i++) { for ( int j = 0; j < col; j++) { printf ( " %c " ,board[i][j]); if (j < col-1) { printf ( "|" ); } } printf ( "\n" ); if (i < row - 1) { for ( int j = 0; j < col; j++) { printf ( "---" ); if (j < col - 1) { printf ( "|" ); } } printf ( "\n" ); } } } |
玩家的移動實現,特別提到的是,實現時注意玩家輸入的坐標與數組對應下標的關系:玩家輸入的坐標對應的數組下標應該減一。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
void PlayerMove( char board[][COL], int row, int col) { int x = 0; int y = 0; while (1) { printf ( "請輸入你的坐標:\n" ); scanf ( "%d%d" ,&x,&y); if (x >= 1 && x <= 3 && y >= 1 && y <= 3) { if (board[x - 1][y - 1] == ' ' ) { board[x - 1][y - 1] = 'X' ; break ; } } else { printf ( "坐標有誤,請重新輸入\n" ); } } } |
電腦下棋的功能實現:(用time讓rand函數變成隨機值而不固定隨機)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void ComputerMove( char board[][COL], int row, int col) { while (1) { srand ((unsigned) time (NULL)); int x = rand () % ROW; int y = rand () % COL; if (board[x][y] == ' ' ) { board[x][y] = 'O' ; break ; } } } |
輸贏的處理(代碼與思路一致,有IsWin函數(判斷輸贏),IsFull(判斷平局))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
char IsWin( char board[][COL], int row, int col) { for ( int i = 0; i < row; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0]!= ' ' ) { return board[i][0]; } if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ' ) { return board[0][i]; } if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ' ) { return board[0][0]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ' ) { return board[0][2]; } if (IsFull(board, row, col) == 1) { return 'Q' ; } } return ' ' ; } static int IsFull( char board[][COL], int row, int col) { for ( int i = 0; i < row; i++) { for ( int j = 0; j < col; j++) { if (board[i][j] == ' ' ) { return 0; } } } return 1; } |
最后就是函數調用問題,設計一個函數game()來調用設計好的代碼功能,進行游戲功能的實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
void game() { char board[ROW][COL] = {0}; InitBoard(board, ROW, COL); ShowBoard(board, ROW, COL); int ret = 0; while (1) { PlayerMove(board, ROW, COL); ComputerMove(board, ROW, COL); ShowBoard(board, ROW, COL); ret = IsWin(board, ROW, COL); if (ret != ' ' ) { break ; } } if (ret == 'X' ) { printf ( "玩家贏\n" ); } if (ret == 'O' ) { printf ( "電腦贏\n" ); } if (ret == 'Q' ) { printf ( "平局\n" ); } } |
主函數作為入口,讓玩家自由選擇進入游戲或者退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
int main() { int input = 0; do { meun(); printf ( "請選擇是否進入游戲:" ); scanf ( "%d" ,&input); switch (input) { case 1: game(); break ; case 0: printf ( "退出游戲\n" ); break ; default : printf ( "選擇有誤,請重新輸入\n" ); break ; } } while (input); return 0; } |
一些需要調用的庫函數以及定義,函數聲明放在自定義頭文件中調用即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#ifndef _GAME_H_ #define _GAME_H_ #include<stdio.h> #include<stdlib.h> #pragma once #define ROW 3 #define COL 3 void InitBoard( char board[][COL], int row, int cow); void ShowBoard( char board[][COL], int row, int col); void PlayerMove( char board[][COL], int row, int col); void ComputerMove( char board[][COL], int row, int col); char IsWin( char board[][COL], int row, int col); #endif |
運行結果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_45042271/article/details/109956046