Giải hộ mình câu này với các bạn ! Viết chương trình biểu diễn ứng dụng trò chơi rắn săn mồi trên C++

ADS
Trả lời câu hỏi của KmnO4_Death Vv

Làm sao để có câu trả lời hay nhất?

  • Luôn có GIẢI THÍCH các bước giải
  • Không copy câu trả lời của Timi
  • Không sao chép trên mạng
  • Không spam câu trả lời để nhận điểm
  • Spam sẽ bị khóa tài khoản
ADS
CÂU TRẢ LỜI
avatar
Timi

25/03/2025

Trợ lý học tập AI - Câu trả lời này chỉ mang tính tham khảo
Để viết một chương trình biểu diễn ứng dụng trò chơi rắn săn mồi (Snake Game) trên C++, bạn có thể tham khảo mã nguồn dưới đây. Chương trình này sử dụng thư viện `conio.h` để xử lý các phím bấm và `windows.h` để điều khiển thời gian. Dưới đây là một ví dụ đơn giản về trò chơi rắn săn mồi: ```cpp #include <iostream> #include <conio.h> #include <windows.h> using namespace std; bool gameOver; const int width = 20; const int height = 20; int x, y, fruitX, fruitY, score; int tailX[100], tailY[100]; int nTail; enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; eDirection dir; void Setup() { gameOver = false; dir = STOP; x = width / 2; y = height / 2; fruitX = rand() % width; fruitY = rand() % height; score = 0; } void Draw() { system("cls"); // Xóa màn hình for (int i = 0; i < width + 2; i++) cout << "#"; cout << endl; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (j == 0) cout << "#"; // Bên trái if (i == y && j == x) cout << "O"; // Rắn else if (i == fruitY && j == fruitX) cout << "F"; // Trái cây else { bool print = false; for (int k = 0; k < nTail; k++) { if (tailX[k] == j && tailY[k] == i) { cout << "o"; // Đuôi rắn print = true; } } if (!print) cout << " "; } if (j == width - 1) cout << "#"; // Bên phải } cout << endl; } for (int i = 0; i < width + 2; i++) cout << "#"; cout << endl; cout << "Score: " << score << endl; } void Input() { if (_kbhit()) { switch (_getch()) { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameOver = true; break; } } } void Logic() { int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = x; tailY[0] = y; for (int i = 1; i < nTail; i++) { prev2X = tailX[i]; prev2Y = tailY[i]; tailX[i] = prevX; tailY[i] = prevY; prevX = prev2X; prevY = prev2Y; } switch (dir) { case LEFT: x--; break; case RIGHT: x++; break; case UP: y--; break; case DOWN: y++; break; default: break; } if (x >= width) x = 0; else if (x < 0) x = width - 1; if (y >= height) y = 0; else if (y < 0) y = height - 1; for (int i = 0; i < nTail; i++) { if (tailX[i] == x && tailY[i] == y) gameOver = true; } if (x == fruitX && y == fruitY) { score += 10; fruitX = rand() % width; fruitY = rand() % height; nTail++; } } int main() { Setup(); while (!gameOver) { Draw(); Input(); Logic(); Sleep(10); // Thời gian chờ } return 0; } ``` ### Hướng dẫn sử dụng: 1. Sao chép mã nguồn trên vào một tệp tin có đuôi `.cpp`, ví dụ `snake_game.cpp`. 2. Biên dịch chương trình bằng một trình biên dịch C++ như g++ hoặc Visual Studio. 3. Chạy chương trình và sử dụng các phím `W`, `A`, `S`, `D` để điều khiển rắn. Nhấn `X` để thoát trò chơi. Chúc bạn thành công với trò chơi rắn săn mồi của mình!
Hãy giúp mọi người biết câu trả lời này thế nào?
5.0/5 (1 đánh giá)
thumb up 0
thumb down
0 bình luận
Bình luận
avatar
level icon

C++

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cstdlib>
#include <ctime>

using namespace std;

bool gameOver;
const int width = 20;
const int height = 20;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;

void Setup() {
   gameOver = false;
   dir = STOP;
   x = width / 2;
   y = height / 2;
   fruitX = rand() % width;
   fruitY = rand() % height;
   score = 0;
}

void Draw() {
   system("cls"); // Clear console
   for (int i = 0; i < width + 2; i++)
       cout << "#";
   cout << endl;

   for (int i = 0; i < height; i++) {
       for (int j = 0; j < width; j++) {
           if (j == 0)
               cout << "#";
           if (i == y && j == x)
               cout << "O";
           else if (i == fruitY && j == fruitX)
               cout << "F";
           else {
               bool printTail = false;
               for (int k = 0; k < nTail; k++) {
                   if (tailX[k] == j && tailY[k] == i) {
                       cout << "o";
                       printTail = true;
                   }
               }
               if (!printTail)
                   cout << " ";
           }
           if (j == width - 1)
               cout << "#";
       }
       cout << endl;
   }

   for (int i = 0; i < width + 2; i++)
       cout << "#";
   cout << endl;
   cout << "Score:" << score << endl;
}

void Input() {
   if (_kbhit()) {
       switch (_getch()) {
       case 'a':
           dir = LEFT;
           break;
       case 'd':
           dir = RIGHT;
           break;
       case 'w':
           dir = UP;
           break;
       case 's':
           dir = DOWN;
           break;
       case 'x':
           gameOver = true;
           break;
       }
   }
}

void Logic() {
   int prevX = tailX[0];
   int prevY = tailY[0];
   int prev2X, prev2Y;
   tailX[0] = x;
   tailY[0] = y;
   for (int i = 1; i < nTail; i++) {
       prev2X = tailX[i];
       prev2Y = tailY[i];
       tailX[i] = prevX;
       tailY[i] = prevY;
       prevX = prev2X;
       prevY = prev2Y;
   }
   switch (dir) {
   case LEFT:
       x--;
       break;
   case RIGHT:
       x++;
       break;
   case UP:
       y--;
       break;
   case DOWN:
       y++;
       break;
   default:
       break;
   }
   if (x >= width || x < 0 || y >= height || y < 0)
       gameOver = true;
   for (int i = 0; i < nTail; i++)
       if (tailX[i] == x && tailY[i] == y)
           gameOver = true;

   if (x == fruitX && y == fruitY) {
       score += 10;
       fruitX = rand() % width;
       fruitY = rand() % height;
       nTail++;
   }
}

int main() {
   srand(time(0));
   Setup();
   while (!gameOver) {
       Draw();
       Input();
       Logic();
       Sleep(50); // Sleep(10) for faster speed
   }
   return 0;
}

Hãy giúp mọi người biết câu trả lời này thế nào?
4.0/5 (1 đánh giá)
thumb up 1
thumb down
0 bình luận
Bình luận
ADS

Nếu bạn muốn hỏi bài tập

Các câu hỏi của bạn luôn được giải đáp dưới 10 phút

Ảnh ads

CÂU HỎI LIÊN QUAN

logo footer
FQA.vn Nền tảng kết nối cộng đồng hỗ trợ giải bài tập học sinh trong khối K12. Sản phẩm được phát triển bởi CÔNG TY TNHH CÔNG NGHỆ GIA ĐÌNH (FTECH CO., LTD)
Điện thoại: 1900636019 Email: info@fqa.vn
Location Địa chỉ: Số 21 Ngõ Giếng, Phố Đông Các, Phường Ô Chợ Dừa, Quận Đống Đa, Thành phố Hà Nội, Việt Nam.
Tải ứng dụng FQA
app store ch play
Người chịu trách nhiệm quản lý nội dung: Nguyễn Tuấn Quang Giấy phép thiết lập MXH số 07/GP-BTTTT do Bộ Thông tin và Truyền thông cấp ngày 05/01/2024
Copyright © 2023 fqa.vn All Rights Reserved
gift-box
survey
survey
Đặt câu hỏi