Tải bản đầy đủ (.docx) (32 trang)

Đồ án Lập trình căn bản Đại học Cần Thơ Đề tài Game Snake (Rắn săn mồi)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (282.89 KB, 32 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ

BÁO CÁO ĐỒ ÁN
MÔN: LẬP TRÌNH CĂN BẢN
Nhóm 05
ĐỀ TÀI: GAME SNAKE (RẮN SĂN MỒI)
GIÁO VIÊN HƯỚNG DẪN:
Phạm Duy Nghiệp

SINH VIÊN THỰC HIỆN:
Phạm Văn Phúc
Trần Hữu Nghị
Hồ Tuấn Kiệt
Lê Khánh Linh
Nguyễn Ngọc Tùng
Nguyễn Trọng Khánh
Lưu Thiện Phát
Nguyễn Dư Nguyên Chương

B1609409
B1609401
B1609171
B1609394
B1609503
B1609391
B1609476
B1609441



Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

MỤC LỤC
I.
GIỚI
THIỆU
TÀI:.............................................................................................................3

ĐỀ

1.

do
chọn
tài..............................................................................................................3

đề

2. Mục tiêu..........................................................................................................................3
3. Yêu cầu...........................................................................................................................3
4. Giới hạn..........................................................................................................................3
5. Hướng giải quyết............................................................................................................3
II.
KẾ...............................................................................................................................3

THIẾT

1.

Giải
thuật
đồ..............................................................................................................3

lưu

2.
Chương
trình
tiết.....................................................................................................15

chi

III. KẾT LUẬN..........................................................................................................................29
1.
Kết
quả
được...........................................................................................................29

đạt

2. Ưu điểm........................................................................................................................30
3. Hạn chế cần khắc phục.................................................................................................30
IV. TÀI LIỆU THAM KHẢO..................................................................................................30

2


Đồ án Lập Trình Căn Bản


Trường Đại học Cần Thơ

I. GIỚI THIỆU ĐỀ TÀI
1. Lí do chọn đề tài
Hoạt động về game đã xuất hiện ở Việt Nam rất lâu và nó bắt nguồn từ game trên
điện thoại và dần dần xuất hiện trên máy tính . Càng ngày nó càng thu hút người chơi và trở
thành một bộ môn thể thao điện tử của nước ta. Và Snake cũng không ngoại lệ cũng từng là 1
game đình đám cả trên điện thoại lẫn đến máy tính. Vì thế chúng em chọn nó để làm đề tài cho
đồ án này.
2. Mục tiêu
Mô phỏng trò chơi Snake (Rắn săn mồi) trên phần mềm Dev C++ bằng ngôn ngữ
C.
3. Yêu cầu
Gồm 8 công việc:
1. In ra số lần số lần đã chơi game khi mở chương trình.
2. Tạo menu game.
3. Khởi tạo , hiển thị con rắn và thức ăn.
4. Điền khiển con rắn theo các hướng (lên , xuống, qua trái , qua phải).
5. Xử lí tình huống rắn chạm biên và tự ăn chính mình.
6. Xử lí tốc độ và chiều dài của rắn khi ăn được hoa quả.
7. Trở về menu game khi người chơi thua cuộc.
8. Hiển thị số điểm người chơi sau mỗi lần ăn được thức ăn và mỗi màn chơi.
4. Giới hạn
-Một tuần lên ý tưởng và thực hiện.
-Số lượng thành viên trong nhóm: 8 người.
5. Hướng giải quyết
-Các thành viên ôn lại các kiến thức đã học trên lớp.
-Tham khảo tài liệu từ internet, giáo trình, sách tại trung tâm học liệu, thư viện
khoa,...
-Lên kế hoạch họp nhóm và phân công công việc cụ thể

II. THIẾT KẾ
1. Giải thuật lưu đồ
1.1. Chương trình chính

3


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

int maingame();

Bắt đầu

srand(time(NULL))

Snake snake; HoaQua hq;

KhoiTao(snake,hq)

int win=0, score=0, Delay=250;

while

TRUE

đúng

Win=XuLy(snake,hq,Delay,scor

HienThi(snake,hq,score);Control(snake);
e);

if

sai
win==-1

đúng

return 0;

gotoXY(92,15)
Kết thúc

printf ("Game Over!!Click
ENTER");

4
break;

Sleep(Delay);


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

5



Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

1.2. Chương trình con
1.2.1. Bộ đếm
if(a>0||a<8)
int i=1
ĐÚNG

SAI

fclose(file)

fseek(file,0,SEEK_END)

b=ftell(file)/sizeof(int)

file=fopen
fwrite(&a,sizeof(int),1,file)
TextColor(12)

printf("\n\n\n\n\n\n>>The Snake Game has run %d times!\n",b)

6

fclose(file)



Đồ án Lập Trình Căn Bản

1.2.2. Logo 1

Trường Đại học Cần Thơ

LOGO 1

Nocursortype();

TextColor(7);

i=0

SAI

i < 120

END

ĐÚNG
printf("%c",196);

i++

TextColor(values);

Values chạy từ 14
xuống 8 và trở lại 14
Lặp lại 13 lần

printf(“text”);

TextColor(7);

i=0

SAI
i < 120

END
ĐÚNG

printf("%c",196);

i++

7


Đồ án Lập Trình Căn Bản

1.2.3. Logo 2

Trường Đại học Cần Thơ

LOGO 2

Nocursortype();

TextColor(7);


i=0

SAI

i < 120

END

ĐÚNG
printf("%c",196);

i++

TextColor(values);
Values chạy từ 14 xuống
8 và trở lại 14
Lặp lại 13 lần

printf(“text”);

Sleep(50);

TextColor(7);

i=0

SAI

i < 120

ĐÚNG
printf("%c",196);

i++

8

END


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

1.2.4. Hiển thị
Bắt đầu
TextColor(14);
void HienThi(Snake snake,HoaQua hq,int &score);
gotoXY(hq.td.x,hq.td.y)
clrscr;
printf("%c%c",219,219);

TextColor(14);

for

TextColor(13);

int i=0
gotoXY (snake.dot[0].x,

snake.dot[0].y);
i<30
printf("%c%c",219,219);

i++
gotoXY(91,i)

for

printf(“%c”,179);
int i=1

Kết thúc

i < snake.n

i++
gotoXY (snake.dot[i].x, snake.dot[i].y);

printf("%c%c",219,219);

9


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

1.2.5. Control


Bắt đầu

int i = snake.n - 1

SAI
i>0

KẾT THÚC

snake.dot[i] = snake.dot[i-1]

1.2.6. Xử lí

i--

10

ĐÚNG


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

11


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ


12


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

hq.td.y = rand() %
consoleHeight;

if

sai
Delay > 30

đúng
Delay -= 5;

return 0;

Kết thúc

13


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ


1.2.7. Menu

14


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

1.2.8. int main
Int main

menu();

_getch();

return 0;

15


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

1.2.9. About
Bắt đầu

void about();


system(“cls”);
Lặp 2 lần, thay đổi
value và text

Sleep(400);
TextColor(values)
printf(“text”);

for

int i=0

i<120
i++
printf("%c",196);

Kết thúc
16


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

2. Chương trình chi tiết
/* Do an lap trinh ngon ngu C: Game SNAKE
Nhom 4:
TEN
MSSV
LOP

Tran Huu Nghi
B1609401 TN16Y8A1
Pham Van Phúc
B1609409 TN16Y8A1
Ho Tuan Kiet
B1609171 TN16Y5A2
Le Khanh Linh
B1609394 TN16Y8A1
Nguyen Ngoc Tung
B1609503 TN16Y8A2
Nguyen Trong Khanh
B1609391 TN16Y8A1
Luu Thien Phat
B1609476 TN16Y8A2
Nguyen Du Nguyen Chuong B1609441 TN16Y8A2
*/
//==========================INCLUDE LIBRARY=========================
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
//=========================KHAI BAO HANG SO=========================
#define consoleWidth 90
#define consoleHeight 29
#define MAX_LIST 3
//=========================KHAI BAO HAM SCREEN=====================
void clrscr() //XOA MAN HINH
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;

HANDLE hConsoleOut;
COORD
Home = {0,0};
DWORD
dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X *
csbiInfo.dwSize.Y,Home,&dummy);
17


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y = 0;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
void gotoXY (int column, int line) //DUA CON TRO DEN TOA DO X,Y
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
int whereX() //GET X
{
CONSOLE_SCREEN_BUFFER_INFO csbi;

if(GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi))
return csbi.dwCursorPosition.X;
return -1;
}
int whereY() //GET Y
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
if(GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi))
return csbi.dwCursorPosition.Y;
return -1;
}
void TextColor(int color) // THAY DOI MAU VAN BAN
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE) , color);
}
void Nocursortype() //AN CON TRO
{
CONSOLE_CURSOR_INFO Info;
Info.bVisible = FALSE;
Info.dwSize = 20;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info);
18


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

}
//=================TAO BO DEM SO LAN THUC HIEN CHUONG TRINH========

void bodem()
{
int a,b;
FILE *file;
file=fopen("D:\\SnakeProject\\BODEM.dat","ab"); //TAO RA FILE DATA:
BODEM.DAT TRONG O DIA E ; ab: NOI VAO TAP TIN NHI PHAN
if(a>0||a<8)
{
int i=1;
i++;
fwrite(&a,sizeof(int),1,file); //GHI DU LIEU KHI THOA MAN DIEU KIEN
}
fclose(file); // FLUSH
file=fopen("D:\\SnakeProject\\BODEM.dat","rb"); //MO FILE DATA: BODEM.DAT
TRONG O DIA E, rb: MO TAP TIN NHI PHAN DE DOC
fseek(file,0,SEEK_END); // THIET LAP VI TRI FILE TOI OFFSET DA CHO: TEN,
SO BYTE DE OFFSET, VI TRI OFFSET THEM VAO: PHAN CUOI FILE
b=ftell(file)/sizeof(int); //TRA VE VI TRI FILE HIEN TAI
fclose(file);
TextColor(12);
printf("\n\n\n\n\n\n>>The Snake Game has run %d times!\n",b);
}
//==========================TAO LOGO CUA GAME======================
void logo1() //LOGO TINH
{
Nocursortype(); //AN CON TRO
TextColor(7);
for(int i=0; i<120; i++)
{
printf("%c",196);

}
TextColor(14);
printf("\n
ssssssssssss
nnnnn nnnnnn
aaaaaa
kkkkkk kkkkkk
ssssssssssssssssss ");
TextColor(13);
19


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

printf("\n ssssssssssssssss nnnnnn nnnnnn
aaaaaaaa
kkkkkk
kkkkkk ssssssssssssssssss ");
TextColor(12);
printf("\n ssssssssssssssssss nnnnnnn nnnnnn
aaaaaaaaaa
kkkkkk
kkkkkk
ssssssssssssssssss ");
TextColor(11);
printf("\n ssssss ssssss nnnnnnnn nnnnnn
aaaaa aaaaa
kkkkkk

kkkkkk
ssssss
");
TextColor(10);
printf("\n ssssss ssssss nnnnnnnnn nnnnnn
aaaaa aaaaa
kkkkkk
kkkkkk
ssssss
");
TextColor(9);
printf("\n
ssssss
nnnnnnnnnn nnnnnn aaaaaaaaaaaaaaaa kkkkkk
kkkkkk
ssssssssssssss
");
TextColor(8);
printf("\n
ssssss
nnnnnnnnnnnnnnnnn aaaaaaaaaaaaaaaaaa
kkkkkkkkkkkk
ssssssssssssss
");
TextColor(9);
printf("\n
ssssss
nnnnnn nnnnnnnnnn aaaaaaaaaaaaaaaaaa kkkkkk
kkkkkk
ssssssssssssss

");
TextColor(10);
printf("\n
ssssss
nnnnnn nnnnnnnnn aaaaaa aaaaaa kkkkkk kkkkkk
ssssss
");
TextColor(11);
printf("\n ssssss ssssss nnnnnn nnnnnnnn aaaaaa aaaaaa kkkkkk
kkkkkk
ssssss
");
TextColor(12);
printf("\n ssssss ssssss nnnnnn nnnnnnn aaaaaa aaaaaa kkkkkk
kkkkkk
ssssssssssssssssss ");
TextColor(13);
printf("\n ssssssssssssssss nnnnnn nnnnnn aaaaaa aaaaaa kkkkkk
kkkkkk ssssssssssssssssss ");
TextColor(14);
printf("\n
ssssssssssss
nnnnnn nnnnn aaaaaa aaaaaa kkkkkk
kkkkkk ssssssssssssssssss \n");
TextColor(7);
for(int i=0; i<120; i++)
{
printf("%c",196);
}
20



Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

printf("\n\n");
}
void logo2() //LOGO HIEU UNG DONG
{
Nocursortype(); //AN CON TRO
TextColor(14);
printf("\n
ssssssssssss
nnnnn nnnnnn
aaaaaa
kkkkkk kkkkkk
ssssssssssssssssss ");
Sleep(50);
TextColor(13);
printf("\n ssssssssssssssss nnnnnn nnnnnn
aaaaaaaa
kkkkkk
kkkkkk ssssssssssssssssss ");
Sleep(50);
TextColor(12);
printf("\n ssssssssssssssssss nnnnnnn nnnnnn
aaaaaaaaaa
kkkkkk
kkkkkk

ssssssssssssssssss ");
Sleep(50);
TextColor(11);
printf("\n ssssss ssssss nnnnnnnn nnnnnn
aaaaa aaaaa
kkkkkk
kkkkkk
ssssss
");
Sleep(50);
TextColor(10);
printf("\n ssssss ssssss nnnnnnnnn nnnnnn
aaaaa aaaaa
kkkkkk
kkkkkk
ssssss
");
Sleep(50);
TextColor(9);
printf("\n
ssssss
nnnnnnnnnn nnnnnn aaaaaaaaaaaaaaaa kkkkkk
kkkkkk
ssssssssssssss
");
Sleep(50);
TextColor(8);
printf("\n
ssssss
nnnnnnnnnnnnnnnnn aaaaaaaaaaaaaaaaaa

kkkkkkkkkkkk
ssssssssssssss
");
Sleep(50);
TextColor(14);
printf("\n
ssssss
nnnnnn nnnnnnnnnn aaaaaaaaaaaaaaaaaa kkkkkk
kkkkkk
ssssssssssssss
");
Sleep(50);
TextColor(13);
21


Đồ án Lập Trình Căn Bản

printf("\n

Trường Đại học Cần Thơ

ssssss

nnnnnn nnnnnnnnn

ssssss

aaaaaa


aaaaaa

kkkkkk kkkkkk

");
Sleep(50);
TextColor(5);
printf("\n ssssss ssssss nnnnnn nnnnnnnn aaaaaa aaaaaa kkkkkk
kkkkkk
ssssss
");
Sleep(50);
TextColor(4);
printf("\n ssssss ssssss nnnnnn nnnnnnn aaaaaa aaaaaa kkkkkk
kkkkkk
ssssssssssssssssss ");
Sleep(50);
TextColor(3);
printf("\n ssssssssssssssss nnnnnn nnnnnn aaaaaa aaaaaa kkkkkk
kkkkkk ssssssssssssssssss ");
Sleep(50);
TextColor(2);
printf("\n
ssssssssssss
nnnnnn nnnnn aaaaaa aaaaaa kkkkkk
kkkkkk ssssssssssssssssss \n");
Sleep(50);
TextColor(1);
}
//=============THONG TIN TRO CHOI, DIEU KHIEN, NGUOI LAP TRINH========

void about()
{
system("cls");
Sleep(400);
TextColor(9);
printf("\n\n\n\t\t\t\t\t\t\t[CONTROL]"); // HUONG DAN DIEU KHIEN
Sleep(400);
TextColor(7);
printf("\n\t\t\t\t\t\t\tA to LEFT");
Sleep(400);
printf("\n\t\t\t\t\t\t\tD to RIGHT");
Sleep(400);
printf("\n\t\t\t\t\t\t\tW to UP");
Sleep(400);
printf("\n\t\t\t\t\t\t\tS to DOWN\n\n");
Sleep(400);
TextColor(5);
for(int i=0;i<120;i++)
22


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

{
printf("%c",196);
}
TextColor(10);
printf("\n\n\t\t\t\t\t The Snake Game is written by 5Team!"); // THONG CO BAN CUA

GAME: NHOM LAP TRINH, TEN GAME, CHUONG TRINH HO TRO, NGUOI HUONG
DAN
Sleep(400);
TextColor(11);
printf("\n\t\t\t\t\t\tProject Name: SNAKE GAME");
Sleep(400);
printf("\n\t\t\t\t\t
The Source Program: Dev C++");
Sleep(400);
TextColor(14);
printf("\n\t\t\t\t\t Adviser: M.S. Pham Duy Nghiep\n\n");
Sleep(400);
TextColor(5);
for(int i=0;i<120;i++)
{
printf("%c",196);
}
TextColor(14);
printf("\n\n\t\t\t\t\t\tThe members of 5Team:"); // THONG TIN THANH VIEN NHOM
LAP TRINH
TextColor(7);
Sleep(400);
printf("\n\t\t\t\t\t\tTran Huu Nghi");
Sleep(400);
printf("\n\t\t\t\t\t\tPham Van Phuc");
Sleep(400);
printf("\n\t\t\t\t\t\tHo Tuan Kiet");
Sleep(400);
printf("\n\t\t\t\t\t\tLe Khanh Linh");
Sleep(400);

printf("\n\t\t\t\t\t\tNguyen Ngoc Tung");
Sleep(400);
printf("\n\t\t\t\t\t\tNguyen Trong Khanh");
Sleep(400);
printf("\n\t\t\t\t\t\tLuu Thien Phat");
Sleep(400);
23


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

printf("\n\t\t\t\t\t\tNguyen Du Nguyen Chuong\n");
system("pause");
}
//=====================KHOI TAO MAINGAME===========================
enum status {UP, DOWN, LEFT, RIGHT};
struct ToaDo
{
int x,y;
//X LA HOANH DO, Y LA TUNG DO
};
struct HoaQua
{
ToaDo td;
};
struct Snake
{
ToaDo dot[65]; //GIOI HAN CON RAN CO 65 DOT

int n;
status tt;
};
void KhoiTao (Snake &snake, HoaQua &hq) //KHOI TAO CON RAN VA THUC AN
{
snake.n = 3; // KHOI TAO CON RAN BAN DAU CO 3 DOT
snake.dot[0].x = 46; //VI TRI BAN DAU CUA CON RAN TREN TRUC X
snake.dot[0].y = 13; //VI TRI BAN DAU CUA CON RAN TREN TRUC X
snake.tt = RIGHT; //CON RAN DI CHUYEN SANG PHAI KHI CHAY CHUONG
TRINH
hq.td.x = 62; //TOA DO BAN DAU CUA THUC AN
hq.td.y = 23;
}

void HienThi (Snake snake, HoaQua hq,int &score) //HIEN THI CON RAN VA THUC AN
LEN MAN HINH
{
//*******************************HIEN THI KHUNG GIOI HAN******************
clrscr();
24


Đồ án Lập Trình Căn Bản

Trường Đại học Cần Thơ

TextColor(14);
for (int i = 0; i < 30; i++) //CANH BIEN
{
gotoXY (91, i);

printf("%c",179);
}
//**************************HIEN THI THUC AN LEN MAN HINH***************
TextColor (14);
gotoXY (hq.td.x, hq.td.y);
printf("%c%c",219,219);
gotoXY(92,5);
printf("SCORE: ",score);
//**************************HIEN THI CON RAN LEN MAN HINH****************
TextColor (13);
gotoXY (snake.dot[0].x, snake.dot[0].y); //DAU CON RAN
printf("%c%c",219,219);
for (int i = 1; i < snake.n; i++)
{
gotoXY (snake.dot[i].x, snake.dot[i].y); //THAN VA DUOI CON RAN
printf("%c%c",219,219);
}
}
//**************************DIEU KHIEN CON RAN****************************
void Control (Snake &snake)
{
for (int i = snake.n - 1; i > 0; i--) // TRUYEN TRANG THAI CHO DOT CU
snake.dot[i] = snake.dot[i-1];
if (_kbhit()) // PHAT HIEN PHIM AN VAO, LUU LAI DE XU LY
{
int key = _getch();
if (key == 'A' || key == 'a') //DIEU KHIEN DAU CON RAN
snake.tt = LEFT;
else if (key == 'D' || key == 'd')
snake.tt = RIGHT;

else if (key == 'W' || key == 'w')
snake.tt = UP;
else if (key == 'S' || key == 's')
snake.tt = DOWN;
}
if (snake.tt == UP)
25


×