Kết quả thực hiện

Một phần của tài liệu Báo cáo thực tập tốt nghiệp tại Trung tâm nghiên cứu phát triển Samsung (SVMC) 2022 (Trang 64 - 72)

2.4.1 Ứng dụng đã làm được 2.4.1.1 Mô tả ứng dụng

-Rắn săn mồi là game cổ điển, xuất hiện vào năm 1997 trên Nokia 6610 là những ô vuông xếp liên tiếp nhau di chuyển trên một màn hình màu xanh đơn giản, nhưng rắn săn mồi đã xây dựng rất thành công tên tuổi của mình. Với bốn trăm triệu bản xuất xưởng và đến hiện tại đã là phiên bản thứ tám. Game có sự hấp dẫn đối với người chơi.

-Bố cục game gồm 3 thành phần:

• Rắn: di chuyển tự động và đổi hướng qua các key(w-lên,s-xuống,d- phải,a-trái)

Táo(con mồi ): tự động xuất hiện ngẫu nhiên trong map

• Tường(map ):ngăn rắn di chuyển và nhận định thua khi đâm vào tường

2.4.1.2 Nội dung phần code #include <iostream>

#include <conio.h>

void run(); void printMap(); void initMap();

void move(int dx, int dy); void update();

void changeDirection(char key); void clearScreen();

void generateFood();

char getMapValue(int value); // Map dimensions

const int mapwidth = 20; const int mapheight = 20;

const int size = mapwidth * mapheight; // The tile values for the map

intmap[size];

// Snake head details int headxpos;

int headypos; int direction;

// Amount of food the snake has (How long the body is) int food = 3;

// Determine if game is running bool running;

{

run(); return 0; }

// Main game function void run()

{

// Initialize the map initMap();

running = true; while (running) { // If a key is pressed if (kbhit()) {

// Change to direction determined by key pressed changeDirection(getch());

}

// Upate the map update();

// Clear the screen clearScreen(); // Print the map printMap();

// wait 0.5 seconds _sleep(500);

}

// Print out game over text

std::cout << "\t\t!!!Game over!" << std::endl << "\t\tYour score is: "

<< food;

// Stop console from closing instantly std::cin.ignore();

}

// Changes snake direction from input void changeDirection(char key) { /*

W A + D S

1 4 + 2 3 */ switch (key) { case 'w': if (direction != 2) direction = 0; break; case 'd': if (direction != 3) direction = 1; break; case 's': if (direction != 4) direction = 2; break; case 'a': if (direction != 5) direction = 3; break; } }

// Moves snake head to new location void move(int dx, int dy) {

// determine new head position int newx = headxpos + dx; int newy = headypos + dy;

// Check if there is food at location

if (map[newx + newy * mapwidth] == -2) { // Increase food value (body length) food++;

// Generate new food on map generateFood();

}

// Check location is free

else if (map[newx + newy * mapwidth] != 0) { running = false;

}

// Move head to new location headxpos = newx;

map[headxpos + headypos * mapwidth] = food + 1; }

// Clears screen void clearScreen() { // Clear the screen system("cls"); }

// Generates new food on map void generateFood() {

int x = 0; int y = 0; do {

// Generate random x and y values within the map x = rand() % (mapwidth - 2) + 1;

y = rand() % (mapheight - 2) + 1; // If location is not free try again } while (map[x + y * mapwidth] != 0); // Place new food

map[x + y * mapwidth] = -2; }

// Updates the map void update() {

// Move in direction indicated switch (direction) { case 0: move(-1, 0); break; case 1: move(0, 1); break; case 2: move(1, 0); break; case 3: move(0, -1); break; }

// Reduce snake values on map by 1 for (int i = 0; i < size; i++) {

if (map[i] > 0) map[i]--; }

}

// Initializes map void initMap() {

// Places the initual head location in middle of map headxpos = mapwidth / 2;

headypos = mapheight / 2;

map[headxpos + headypos * mapwidth] = 1; // Places top and bottom walls

for (int x = 0; x < mapwidth; ++x) { map[x] = -1;

map[x + (mapheight - 1) * mapwidth] = -1; }

// Places left and right walls

for (int y = 0; y < mapheight; y++) { map[0 + y * mapwidth] = -1;

map[(mapwidth - 1) + y * mapwidth] = -1; }

// Generates first food generateFood(); }

// Prints the map to console void printMap()

{

for (int x = 0; x < mapwidth; ++x) { for (int y = 0; y < mapheight; ++y) { // Prints the value at current x,y location

std::cout << getMapValue(map[x + y * mapwidth]); }

// Ends the line for next x value std::cout << std::endl;

} }

// Returns graphical character for display from map value char getMapValue(int value)

{

// Returns a part of snake body if (value > 0) return 'o';

switch (value) { // Return wall case -1: return 'X'; // Return food case -2: return 'O'; }

}

2.4.1.2 Kết quả đạt được

Bằng cách sử dụng trình biên dịch Microsoft visual C++ 2000, chúng ta có thể chơi trò chơi này ngay trên màn hình in ra . Sau khi Build chúng ta thu được màn hình của game như hình sau.

Màn hình hiển thị sẽ hiển thị kích thước bán đầu của con rắn và vị trí, đồng thời con mồi sẽ xuất hiện random trên toàn bộ map được đóng khung như trên.

Sau khi rắn đâm vào viền của map, màn hình sẽ dừng chương trình chạy của game dồng thời hiển thị dòng chữ GAME OVER ,và hiển thị số điểm mà bạn đạt được.

2.4.2 Đánh giá chung

Sinh viên thực tập đã làm được trong thời gian học tập tại doanh nghiệp:

Học tập và làm việc phù hợp theo yêu cầu

Đảm bảo đúng tiến độ yêu cầu. Những hạn chế mà sinh viên cần khắc phục:

Chưa nắm chắc được các thuật toán nâng cao ( stack , queue)

Một phần của tài liệu Báo cáo thực tập tốt nghiệp tại Trung tâm nghiên cứu phát triển Samsung (SVMC) 2022 (Trang 64 - 72)