1. 2: Sản phẩm và dịch vụ
2.4. Kết quả thực hiện
▪ 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();
// 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; int main() { run(); return0; }
// 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
elseif (map[newx + newy * mapwidth] != 0) { running = false;
}
// Move head to new location headxpos = newx;
headypos = newy;
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) { case0: move(-1, 0); break; case1: move(0, 1); break; case2: move(1, 0); break; case3: 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) ● Tổ chức code đôi chỗ còn chưa gọn, chưa hoàn toàn tối ưu.
CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ THỰC TẬP
Qua quá trình thực tập ở Công ty Samsung Vietnam Mobile R&D Center, em đã hoàn thành được một ứng dụng Rắn săn mồi. Đây là bài tập trong quá trình thực tập của em tại công ty Samsung SVMC. Trong quá trình thực tập tại công ty Samsung SVMC, em đã học được rất nhiều từ các anh chị đã có kinh nhiệm đi trước, các bạn sinh viên thực tập trong ngành IT nói chung. Thời gian được học tập tại công ty đã giúp em rất nhiều về kiến thức nâng cao về kiến thức cơ bản và nâng cao về mảng, xử lí logic, các thuật toán sắp xếp và về các cấu trúc dữ liệu không nguyên thủy (stack, queue, tree). Những trải nghiệm ở môi trường doanh nghiệp trong thời gian thực tập đã giúp em khắc phục các lỗi về code, quy chuẩn, , tối ưu hóa.
Trong kì thực tập với tiêu chí cho sinh viên làm quen với môi trường doanh nghiệp thì báo cáo đã thể hiện thái độ, kiến thức và nỗ lực của sinh viên trong thời gian thực tập tại công ty theo tiến độ của Khoa CNTT trường đại học Công nghiệp Hà Nội.
KẾT LUẬN VÀ KIẾN NGHỊ 1. Kết luận
Thời gian thực tập tại Công ty Samsung Vietnam Mobile R&D Center đã giúp em có thêm nhiều kiến thức, kỹ năng và thái độ làm việc khi lần đầu trải nghiệm trong quá trình tìm hiểu về quy trình sản xuất, thi công ở một công ty product hàng đầu của Việt Nam.
Các kiến thức sinh viên đã học được tại doanh nghiệp:
- Hoàn thiện các kiến thức cơ bản và cập nhật về C, C+, Java,… - Hiểu về các thuật toán cơ bản
- Học them được những tư duy logic, các thuật toán nâng cao - Các kỹ năng liên quan đến debug trong lập trình
Các kỹ năng mềm sinh viên đã được trau dồi tại công ty: - Kỹ năng làm việc nhóm
- Kỹ năng thuyết trình - Kỹ năng quản lí thời gian.
2. Kiến nghị
Yêu cầu thông tin tại Công ty Samsung Vietnam Mobile R&D Center vô cùng bảo mật do đó việc công khai mã nguồn cũng bị hạn chế cho các sinh viên thực tập. Thời gian báo cáo thực tập tốt nghiệp tại trường trùng với lịch đánh giá tại công ty, do đó tại thời điểm báo cáo thực tập này bản thân em không thể chuẩn bị được project cuối khóa đánh giá tại công ty để báo cáo trong thời gian này. Project cuối khóa đánh giá tại Samsung SVMC nhiều chức năng và giao diện nâng cao hơn.
NHẬT KÝ THỰC TẬP
Họ và tên: Nguyễn Văn Hùng Mã sinh viên: 2018602488 Đơn vị thực tập: Công ty Samsung Vietnam Mobile R&D Center Người hướng dẫn tại doanh nghiệp: Chị Nguyễn Thị Thanh Dung
Tuần Từ ngày - đến ngày (2021) Nội dung thực tập Kết quả đạt được Ghi chú 1 10/1- 14/01
- Đào tạo Hội nhập - Hướng dẫn sử
dụng công cụ: Visual Studio, Git
và GitHub
- Hiểu môi trường, văn hóa ứng xử, tính chất công việc tại Samsung SVMC
- Nắm được các quy định: thời gian làm việc, đeo thẻ, nội quy, cam kết, bảo mật thông tin - Sử dụng các kiến thức được học để xây dựng và hoàn thành bài tập 2 17/1- 21/01 Học kiến thức và áp dụng về Array -Nắm được kiến thức về Array và hoàn thành các bài tập. 4 24/1- 28/01 Học kiến thức và áp dụng về String -Nắm được kiến thức về String và hoàn thành các bài . 5 31/1- 04/02 Học kiến thức và áp dụng về Stack + Queue -Nắm được kiến thức về Stack và Queue - Thực hành bài tập
6 07/2-11/2 Học kiến thức và ứng dụng về Arraylist+ Linkedlist -Nắm được kiến thức về Arraylist vs Lsinkedlist - Thực hành bài tập 7 14/2-18/2 Học kiến thức và áp dụng về DFS + BFS -Nắm được kiến thức về DFS và BFS và hoàn thành các bài tập 8 21/2-25/2 Đọc kiến thức và làm ứng dụng rắn săn mồi
Tạo được bức tường , con rắn , thức ăn,… 9 28/2-04/3 Đọc kiến thức và làm ứng dụng rắn săn mồi - Tạo được các động tác di chuyển và xử lý các
trường hợp xảy ra.
-Chuẩn bị cho bài tập cuối khóa thực tập bản hoàn thành
TÀI LIỆU THAM KHẢO
[1] Trang chủ công ty cổ phần Samsung: https://samsung.com/vn/
[2] Trang: https://portal.ptit.edu.vn/trung-tam-nghien-cuu-va-phat-trien-dien- thoai-di-dong-samsung-viet-nam-svmc/ [3] Trang https://www.geeksforgeeks.org/array-data-structure/ [4] Trang https://www.geeksforgeeks.org/string-data-structure/ [5] Trang https://www.geeksforgeeks.org/arraylist-in-java/ [6] Trang https://www.geeksforgeeks.org/data-structures/linked-list/ [7] Trang https://www.geeksforgeeks.org/queue-data-structure/ [8] Trang https://www.geeksforgeeks.org/stack-data-structure/ [9] Trang https://samsungcareers.com.vn.