c语言简单效果展示
目录
c语言简单效果展示
到这里为止,还差数组,字符串等操作,就基本可以实现一些简单的程序了,本文就给大家展示下,写一个最简单的五子棋。目标就只是给大家展示C语言的魅力,实现的思路就不赘述了。
五子棋的基本规则是玩家轮流在一个15×15或19×19的棋盘上放置棋子,目标是第一个形成连续五个相同颜色棋子的玩家获胜。我们将实现一个简单的文本版五子棋,包括一个15x15的棋盘,玩家一次输入坐标来下棋,由程序判定胜负。
代码:
#include <stdio.h>
#define BOARD_SIZE 15 // 棋盘大小
#define EMPTY ' ' // 空位置
#define PLAYER_X 'X' // 玩家X
#define PLAYER_O 'O' // 玩家O
// 棋盘
char board[BOARD_SIZE][BOARD_SIZE];
// 初始化棋盘
void init_board() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
board[i][j] = EMPTY;
}
}
}
// 打印棋盘
void print_board() {
printf("\n ");
for (int i = 0; i < BOARD_SIZE; i++) {
printf("%2d", i);
}
printf("\n");
for (int i = 0; i < BOARD_SIZE; i++) {
printf("%2d", i);
for (int j = 0; j < BOARD_SIZE; j++) {
printf("%2c", board[i][j]);
}
printf("\n");
}
}
// 检查当前位置是否有效
int is_valid_move(int x, int y) {
if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE && board[x][y] == EMPTY) {
return 1;
}
return 0;
}
// 检查是否有五子连线(水平、垂直、对角线)
int check_win(int x, int y, char player) {
// 水平
int count = 1;
for (int i = 1; i < 5; i++) {
if (x + i < BOARD_SIZE && board[x + i][y] == player) {
count++;
} else {
break;
}
}
for (int i = 1; i < 5; i++) {
if (x - i >= 0 && board[x - i][y] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return 1;
// 垂直
count = 1;
for (int i = 1; i < 5; i++) {
if (y + i < BOARD_SIZE && board[x][y + i] == player) {
count++;
} else {
break;
}
}
for (int i = 1; i < 5; i++) {
if (y - i >= 0 && board[x][y - i] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return 1;
// 主对角线
count = 1;
for (int i = 1; i < 5; i++) {
if (x + i < BOARD_SIZE && y + i < BOARD_SIZE && board[x + i][y + i] == player) {
count++;
} else {
break;
}
}
for (int i = 1; i < 5; i++) {
if (x - i >= 0 && y - i >= 0 && board[x - i][y - i] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return 1;
// 副对角线
count = 1;
for (int i = 1; i < 5; i++) {
if (x + i < BOARD_SIZE && y - i >= 0 && board[x + i][y - i] == player) {
count++;
} else {
break;
}
}
for (int i = 1; i < 5; i++) {
if (x - i >= 0 && y + i < BOARD_SIZE && board[x - i][y + i] == player) {
count++;
} else {
break;
}
}
if (count >= 5) return 1;
return 0;
}
// 玩家下棋
void player_move(char player) {
int x, y;
while (1) {
printf("Player %c, enter your move (row col): ", player);
scanf("%d %d", &x, &y);
if (is_valid_move(x, y)) {
board[x][y] = player;
break;
} else {
printf("Invalid move. Try again.\n");
}
}
}
// 主函数
int main() {
int game_over = 0;
char current_player = PLAYER_X;
init_board();
while (!game_over) {
print_board();
player_move(current_player);
// 检查是否有玩家获胜
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == current_player && check_win(i, j, current_player)) {
print_board();
printf("Player %c wins!\n", current_player);
game_over = 1;
break;
}
}
if (game_over) break;
}
// 切换玩家
if (current_player == PLAYER_X) {
current_player = PLAYER_O;
} else {
current_player = PLAYER_X;
}
}
return 0;
}
代码解析:
1、棋盘初始化与打印:
init_board() 初始化棋盘,每个位置设为空格 ’ ‘。
print_board() 打印棋盘状态。
2、玩家下棋:
玩家输入棋盘的行和列,程序检查输入是否合法(是否为空位置),然后将棋子放在指定位置。
3、胜利检测:
check_win() 检查某个位置的玩家是否形成了五子连线,包括水平、垂直、主对角线和副对角线的检测。
4、游戏主循环:
游戏按回合进行,玩家轮流下棋。每次下棋后都会检查是否有玩家获胜,如果有则游戏结束。
5、扩展与改进:
当前实现仅支持两名玩家对战,没有 AI 或者随机棋手。
可以进一步添加 AI 对手,通过简单的算法(例如随机选择一个空位置)来进行计算机的下棋。
添加游戏结束后的重新开始或退出选项。
效果如下:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Player X, enter your move (row col): 7 7
每次你输入一个合法的位置,棋盘会更新并打印出来。如果有玩家形成了五子连线,程序会宣布获胜并结束游戏。
怎么样,C语言是不是很得劲!我反正是玩不腻