c++用面向对象思想实现小游戏
时间: 2023-11-27 15:46:53 浏览: 101
使用面向对象的思想实现小游戏可以使代码更加模块化和易于维护。下面是一个使用C++和面向对象思想实现的小游戏的示例:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
class SnakeGame {
public:
SnakeGame(int row, int col) : m_row(row), m_col(col) {
m_board = new char*[m_row];
for (int i = 0; i < m_row; ++i) {
m_board[i] = new char[m_col];
for (int j = 0; j < m_col; ++j) {
m_board[i][j] = ' ';
}
}
}
~SnakeGame() {
for (int i = 0; i < m_row; ++i) {
delete[] m_board[i];
}
delete[] m_board;
}
void init() {
srand(time(NULL));
m_snake.clear();
m_snake.push_back(make_pair(rand() % m_row, rand() % m_col));
m_food = make_pair(rand() % m_row, rand() % m_col);
updateBoard();
}
void play() {
while (true) {
char c;
cin >> c;
if (c == 'w' || c == 'a' || c == 's' || c == 'd') {
move(c);
if (isGameOver()) {
cout << "Game Over!" << endl;
break;
}
}
}
}
private:
void updateBoard() {
for (int i = 0; i < m_row; ++i) {
for (int j = 0; j < m_col; ++j) {
m_board[i][j] = ' ';
}
}
for (auto p : m_snake) {
m_board[p.first][p.second] = '*';
}
m_board[m_food.first][m_food.second] = '#';
}
void move(char c) {
int dx = 0, dy = 0;
if (c == 'w') {
dx = -1;
} else if (c == 'a') {
dy = -1;
} else if (c == 's') {
dx = 1;
} else if (c == 'd') {
dy = 1;
}
auto head = m_snake.front();
auto newHead = make_pair(head.first + dx, head.second + dy);
m_snake.insert(m_snake.begin(), newHead);
if (newHead == m_food) {
m_food = make_pair(rand() % m_row, rand() % m_col);
} else {
m_snake.pop_back();
}
updateBoard();
}
bool isGameOver() {
auto head = m_snake.front();
if (head.first < 0 || head.first >= m_row || head.second < 0 || head.second >= m_col) {
return true;
}
for (int i = 1; i < m_snake.size(); ++i) {
if (head == m_snake[i]) {
return true;
}
}
return false;
}
private:
int m_row, m_col;
char** m_board;
vector<pair<int, int>> m_snake;
pair<int, int> m_food;
};
int main() {
SnakeGame game(10, 10);
game.init();
game.play();
return 0;
}
```