用C++和EasyX写一个飞行棋的程序
时间: 2023-11-25 18:08:35 浏览: 286
飞行棋c++代码
4星 · 用户满意度95%
好的,下面是一个简单的飞行棋程序的代码示例,使用C++和EasyX图形库:
```cpp
#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
using namespace std;
const int BOARD_SIZE = 10; // 棋盘大小
const int BLOCK_SIZE = 50; // 每个方格大小
const int WINDOW_WIDTH = BLOCK_SIZE * BOARD_SIZE + 200; // 窗口宽度
const int WINDOW_HEIGHT = BLOCK_SIZE * BOARD_SIZE; // 窗口高度
// 棋盘类
class Board {
public:
Board() {
// 初始化棋盘
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
board[i][j] = 0;
}
}
// 设置起点和终点
board[0][0] = 1;
board[BOARD_SIZE - 1][BOARD_SIZE - 1] = 2;
// 设置障碍物
board[2][2] = 3;
board[4][4] = 3;
board[6][6] = 3;
board[8][8] = 3;
}
// 绘制棋盘
void draw() const {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
// 绘制棋盘格子
if ((i + j) % 2 == 0) {
setfillcolor(WHITE);
} else {
setfillcolor(LIGHTGRAY);
}
bar(i * BLOCK_SIZE, j * BLOCK_SIZE, (i + 1) * BLOCK_SIZE, (j + 1) * BLOCK_SIZE);
// 绘制棋子
if (board[i][j] == 1) {
setfillcolor(RED);
solidcircle((i + 0.5) * BLOCK_SIZE, (j + 0.5) * BLOCK_SIZE, BLOCK_SIZE * 0.4);
} else if (board[i][j] == 2) {
setfillcolor(GREEN);
solidcircle((i + 0.5) * BLOCK_SIZE, (j + 0.5) * BLOCK_SIZE, BLOCK_SIZE * 0.4);
} else if (board[i][j] == 3) {
setfillcolor(BLACK);
solidrectangle(i * BLOCK_SIZE + BLOCK_SIZE * 0.25, j * BLOCK_SIZE + BLOCK_SIZE * 0.25,
(i + 1) * BLOCK_SIZE - BLOCK_SIZE * 0.25, (j + 1) * BLOCK_SIZE - BLOCK_SIZE * 0.25);
}
}
}
}
// 判断是否到达终点
bool is_end(int x, int y) const {
return (x == BOARD_SIZE - 1) && (y == BOARD_SIZE - 1);
}
// 判断是否有障碍物
bool has_obstacle(int x, int y) const {
return board[x][y] == 3;
}
private:
int board[BOARD_SIZE][BOARD_SIZE];
};
// 游戏类
class Game {
public:
Game() {
srand((unsigned) time(NULL)); // 初始化随机数种子
}
// 开始游戏
void start() {
init(); // 初始化游戏
while (!board.is_end(x, y)) { // 游戏循环
board.draw(); // 绘制棋盘
draw_info(); // 绘制提示信息
move(); // 移动棋子
}
board.draw(); // 绘制棋盘
draw_info(); // 绘制提示信息
draw_win(); // 绘制胜利画面
_getch(); // 等待按键
closegraph(); // 关闭图形界面
}
private:
int x, y; // 当前位置
Board board; // 棋盘
// 初始化游戏
void init() {
initgraph(WINDOW_WIDTH, WINDOW_HEIGHT); // 初始化图形界面
x = 0;
y = 0;
}
// 绘制提示信息
void draw_info() const {
setbkcolor(LIGHTGRAY);
settextcolor(BLACK);
char pos_str[50];
sprintf(pos_str, "当前位置:(%d, %d)", x, y);
outtextxy(BOARD_SIZE * BLOCK_SIZE + 30, 30, pos_str);
if (board.has_obstacle(x, y)) {
outtextxy(BOARD_SIZE * BLOCK_SIZE + 30, 60, "当前位置有障碍物!");
}
}
// 移动棋子
void move() {
int key = _getch(); // 获取键盘输入
switch (key) {
case 'w': // 上移
if (y > 0) {
y--;
}
break;
case 's': // 下移
if (y < BOARD_SIZE - 1) {
y++;
}
break;
case 'a': // 左移
if (x > 0) {
x--;
}
break;
case 'd': // 右移
if (x < BOARD_SIZE - 1) {
x++;
}
break;
}
}
// 绘制胜利画面
void draw_win() const {
setbkcolor(BLACK);
settextcolor(WHITE);
settextstyle(80, 0, _T("黑体"));
outtextxy(WINDOW_WIDTH / 2 - 200, WINDOW_HEIGHT / 2 - 50, "恭喜通关!");
}
};
int main() {
Game game;
game.start();
return 0;
}
```
这个程序使用了EasyX图形库,需要在编译时链接EasyX库。
希望能对您有所帮助!
阅读全文