Untitled
unknown
plain_text
2 years ago
6.6 kB
10
Indexable
#include<iostream>
#include<conio.h>
#include<dos.h>
#include <windows.h>
#include <time.h>
#define SCREEN_WIDTH 90
#define SCREEN_HEIGHT 26
#define WIN_WIDTH 70
using namespace std;
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
COORD CursorPosition;
int enemyY[3];
int enemyX[3];
int enemyFlag[3];
char car[4][4] = { ' ','�','�',' ',
'�','�','�','�',
' ','�','�',' ',
'�','�','�','�' };
int carPos = WIN_WIDTH / 2;
int score = 0;
// Hàm dịch con trỏ đến vị trí (x, y)
void gotoxy(int x, int y) {
CursorPosition.X = x;
CursorPosition.Y = y;
SetConsoleCursorPosition(console, CursorPosition);
}
// Hàm thiết lập sự hiện diện của con trỏ và kích thước của nó
void setcursor(bool visible, DWORD size) {
if (size == 0)
size = 20;
CONSOLE_CURSOR_INFO lpCursor;
lpCursor.bVisible = visible;
lpCursor.dwSize = size;
SetConsoleCursorInfo(console, &lpCursor);
}
// Vẽ khung viền trò chơi
void drawBorder() {
for (int i = 0; i < SCREEN_HEIGHT; i++) {
for (int j = 0; j < 17; j++) {
gotoxy(0 + j, i); cout << "�";
gotoxy(WIN_WIDTH - j, i); cout << "�";
}
}
for (int i = 0; i < SCREEN_HEIGHT; i++) {
gotoxy(SCREEN_WIDTH, i); cout << "�";
}
}
// Sinh vị trí mới cho xe địch
void genEnemy(int ind) {
enemyX[ind] = 17 + rand() % (33);
}
// Vẽ xe địch lên màn hình
void drawEnemy(int ind) {
if (enemyFlag[ind] == true) {
gotoxy(enemyX[ind], enemyY[ind]); cout << "****";
gotoxy(enemyX[ind], enemyY[ind] + 1); cout << " ** ";
gotoxy(enemyX[ind], enemyY[ind] + 2); cout << "****";
gotoxy(enemyX[ind], enemyY[ind] + 3); cout << " ** ";
}
}
// Xóa xe địch khỏi màn hình
void eraseEnemy(int ind) {
if (enemyFlag[ind] == true) {
gotoxy(enemyX[ind], enemyY[ind]); cout << " ";
gotoxy(enemyX[ind], enemyY[ind] + 1); cout << " ";
gotoxy(enemyX[ind], enemyY[ind] + 2); cout << " ";
gotoxy(enemyX[ind], enemyY[ind] + 3); cout << " ";
}
}
// Đặt lại vị trí và tình trạng của xe địch
void resetEnemy(int ind) {
eraseEnemy(ind);
enemyY[ind] = 1;
genEnemy(ind);
}
// Vẽ xe người chơi lên màn hình
void drawCar() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
gotoxy(j + carPos, i + 22); cout << car[i][j];
}
}
}
// Xóa xe người chơi khỏi màn hình
void eraseCar() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
gotoxy(j + carPos, i + 22); cout << " ";
}
}
}
// Kiểm tra va chạm giữa xe người chơi và xe địch
int collision() {
if (enemyY[0] + 4 >= 23) {
if (enemyX[0] + 4 - carPos >= 0 && enemyX[0] + 4 - carPos < 9) {
return 1;
}
}
return 0;
}
// Hiển thị màn hình khi kết thúc trò chơi
void gameover() {
system("cls");
cout << endl;
cout << "\t\t--------------------------" << endl;
cout << "\t\t-------- Game Over -------" << endl;
cout << "\t\t--------------------------" << endl << endl;
cout << "\t\tPress any key to go back to menu.";
_getch();
}
// Cập nhật điểm số trên màn hình
void updateScore() {
gotoxy(WIN_WIDTH + 7, 5); cout << "Score: " << score << endl;
}
// Hiển thị hướng dẫn chơi trò chơi
void instructions() {
system("cls");
cout << "Instructions";
cout << "\n----------------";
cout << "\n Avoid Cars by moving left or right. ";
cout << "\n\n Press 'a' to move left";
cout << "\n Press 'd' to move right";
cout << "\n Press 'escape' to exit";
cout << "\n\nPress any key to go back to menu";
_getch();
}
// Hàm chơi trò chơi
void play() {
carPos = -1 + WIN_WIDTH / 2;
score = 0;
enemyFlag[0] = 1;
enemyFlag[1] = 0;
enemyY[0] = enemyY[1] = 1;
system("cls");
drawBorder();
updateScore();
genEnemy(0);
genEnemy(1);
gotoxy(WIN_WIDTH + 7, 2); cout << "Car Game";
gotoxy(WIN_WIDTH + 6, 4); cout << "----------";
gotoxy(WIN_WIDTH + 6, 6); cout << "----------";
gotoxy(WIN_WIDTH + 7, 12); cout << "Control ";
gotoxy(WIN_WIDTH + 7, 13); cout << "-------- ";
gotoxy(WIN_WIDTH + 2, 14); cout << " A Key - Left";
gotoxy(WIN_WIDTH + 2, 15); cout << " D Key - Right";
gotoxy(18, 5); cout << "Press any key to start";
_getch();
gotoxy(18, 5); cout << " ";
while (1) {
if (_kbhit()) {
char ch = _getch();
if (ch == 'a' || ch == 'A') {
if (carPos > 18)
carPos -= 4;
}
if (ch == 'd' || ch == 'D') {
if (carPos < 50)
carPos += 4;
}
if (ch == 27) {
break;
}
}
drawCar();
drawEnemy(0);
drawEnemy(1);
if (collision() == 1) {
gameover();
return;
}
Sleep(50);
eraseCar();
eraseEnemy(0);
eraseEnemy(1);
if (enemyY[0] == 10)
if (enemyFlag[1] == 0)
enemyFlag[1] = 1;
if (enemyFlag[0] == 1)
enemyY[0] += 1;
if (enemyFlag[1] == 1)
enemyY[1] += 1;
if (enemyY[0] > SCREEN_HEIGHT - 4) {
resetEnemy(0);
score++;
updateScore();
}
if (enemyY[1] > SCREEN_HEIGHT - 4) {
resetEnemy(1);
score++;
updateScore();
}
}
}
int main() {
setcursor(0, 0);
srand((unsigned)time(NULL));
do {
system("cls");
gotoxy(10, 5); cout << " -------------------------- ";
gotoxy(10, 6); cout << " | Car Game | ";
gotoxy(10, 7); cout << " --------------------------";
gotoxy(10, 9); cout << "1. Start Game";
gotoxy(10, 10); cout << "2. Instructions";
gotoxy(10, 11); cout << "3. Quit";
gotoxy(10, 13); cout << "Select option: ";
char op = _getche();
if (op == '1') play();
else if (op == '2') instructions();
else if (op == '3') exit(0);
} while (1);
return 0;
}
Editor is loading...