1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo môn học Đồ họa máy tính Đ ti game hứng bóng Đơn giản

20 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Game Hứng Bóng Đơn Giản
Tác giả Hoàng Bích Diệp, Trần Quang Anh, Nguyễn Xuân Hiếu
Người hướng dẫn TS. Nguyễn Đình Thái
Trường học Trường Đại Học Điện Lực
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo
Năm xuất bản 2023-2024
Thành phố Hà Nội
Định dạng
Số trang 20
Dung lượng 835,19 KB

Nội dung

Chúng em xin gửi lời cảm ơn chân thành đến thầy Nguyễn Đình Thái giảng viên Bộ môn Đồ họa máy tính.- trường Đại học Điện Lực người đã tận tình hướng dẫn, chỉ bảo em trong suốt quá trình

Trang 1

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO MÔN HỌC

ĐỒ HỌA MÁY TÍNH

Đ TI:

GAME HỨNG BÓNG ĐƠN GIẢN

Giảng viên hướng dẫn : TS.NGUYỄN ĐÌNH THÁI Sinh viên thực hiện : HONG BÍCH DIỆP

TRẦN QUANG ANH NGUYỄN XUÂN HIẾU Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : CÔNG NGHỆ PHẦN MM Lớp : D16CNPM1

Khóa học : 2023-2024

PHIẾU CHẤM ĐIỂM

Hà Nội, ngày 14 tháng 4 năm 2024

Trang 2

STT Họ và tên sinh viên Điểm Chữ ký

Giảng viên chấm 1:

Giảng viên chấm 2:

Trang 3

LỜI CẢM ƠN

Trong thời gian làm đồ án tốt nghiệp, em đã nhận được nhiều sự giúp

đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, gia đình và bạn bè Chúng em xin gửi lời cảm ơn chân thành đến thầy Nguyễn Đình Thái giảng viên Bộ môn Đồ họa máy tính.- trường Đại học Điện Lực người đã tận tình hướng dẫn, chỉ bảo em trong suốt quá trình làm báo cáo Em cũng xin chân thành cảm ơn các thầy cô giáo trong trường Đại học Điện Lực nói chung, các thầy cô trong bộ môn nói riêng đã dạy dỗ cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp em có được cơ

sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học tập Cuối cùng, chúng em xin chân thành cảm ơn gia đình và bạn bè,

đã luôn tạo điều kiện, quan tâm, giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành khoá luận tốt nghiệp Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế của nhóm em, báo cáo này không thể tránh được những thiếu sót Chúng em rất mong nhận được sự chỉ bảo, đóng góp

ý kiến của các thầy cô để tôi có điều kiện bổ sung, nâng cao ý thức của mình, phục vụ tốt hơn công tác thực tế sau này

Trang 4

MỤC LỤC

LỜI CẢM ƠN

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

MỞ ĐẦU

CHƯƠNG 1: GIỚI THIỆU V MÔ TẢ BI TOÁN THỰC TẾ ĐƯỢC GIẢI QUYẾT

1.1 Tên đề tài : Game đỡ bóng

1.2 Lý do chọn đề tài

1.3 Mô tả bài toán thực tế được giải quyết

1.4 Đặt vấn đề

CHƯƠNG 2: CHI TIẾT CÁC PHƯƠNG PHÁP DÙNG ĐỂ GIẢI QUYẾT BI TOÁN

2.1 Các thuật toán được áp dụng

2.1.1 Thuật toán Sutherland – Hodgman

2.1.2 Thuật toán Cohen – Sutherland

CHƯƠNG 3: CHƯƠNG TRÌNH V THỰC NGHIỆM

3.1 Code game:

3.2 Kết quả

3.2.1 Giao diện chính

3.2.2 Giao diện Game over

KẾT LUẬN

TÀI LIỆU THAM KHẢO

Trang 5

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

Hình 2.1: Mô tả thuật toán Cohen-Sutherland………4 Hình 3.1: Giao diện chính………12

over……….13

Trang 6

MỞ ĐẦU

Như chúng ta đã thấy trong những năm gần đây sự phát triển vượt bậc về công nghệ đồ họa đã mang lại cho con người chúng ta vô vàn sự tiện nghi, những trải nghiệm mới mẻ, chân thật Vậy đồ họa máy tính là gì: Đồ họa máy tính là phương pháp và công nghệ dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh bằng máy tính Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về ở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực khác như đại số, hình học giải tích, hình học họa hình, quang học, và kĩ thuật máy tính, đặc biệt là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch đồ họa ) Là sinh viên khoa Công nghệ thông tin trường Đại học Điện lực,chúng em cũng được tiếp xúc với môn học đồ họa máy tính Với những kiến thức nhóm em đã được học và được sự hướng dẫn của thầy chúng em đã thực hiện dự án xây dựng game hứng bóng đơn giản ” Trong quá trình thực hiện nghiên cứu chúng em đã

sử dụng thư viện đồ họa openGL đang được sử dụng rộng rãi hiện nay Có lẽ rằng chương trình và báo cáo của chúng em chưa được chuyên nghiệp,hoàn chỉnh nhất, còn có những thiếu xót Vì thế em rất mong thầy cô và các bạn có thể góp ý để nhóm em xây dựng đề đạt kết quả tốt nhất có thể

Trang 7

CHƯƠNG 1: GIỚI THIỆU V MÔ TẢ BI TOÁN THỰC TẾ ĐƯỢC

GIẢI QUYẾT 1.1 Tên đề tài : Game đỡ bóng

1.2 Lý do chọn đề tài

Mô tả và giải thích các thuật toán đã được áp dụng tạo nên game trên, qua

đó tìm hiểu sâu hơn về thuật toán và áp dụng cho các mục đích sau này

1.3 Mô tả bài toán thực tế được giải quyết

Trước khi xây dựng tác tử cho trò chơi, chúng ta hãy bắt đầu bằng cách xác định đâu là hướng có thể tiếp cận của thuật toán cho trò chơi này Trước hết ta cần quy khoảng sân trò chơi trong đường đỏ để dễ dàng tính toán chuyển động của quả bóng hợp lý nhất có thể và cũng như để xây dựng chức năng di chuyển của người chơi cũng như để tính điểm người chơi Ở đây, ta sẽ quy định không gian trong khung trò chơi như một độ thị tọa độ hàm số chèn vẽ 1 hình tròn nhỏ

và 1 hình chữ nhật vào với việc cài đặt chức năng mỗi khi thanh chữ nhật sẽ di chuyển trên trục hoành tính toán cũng như hình tròn di chuyển tương ứng của trong khoảng không trục tung tương ứng và di chuyển ngược lại ra sao trong từng thường hợp đụng cột trái hoặc phải và trường hợp đỡ trượt và khi người chơi đỡ trúng bóng

1.4 Đặt vấn đề

Đối tượng nghiên cứu : Nghiên cứu và sử dụng thuật toán xén đa giác trong trò chơi áp dụng các thư viện Glut và Opengl

7

Trang 8

CHƯƠNG 2: CHI TIẾT CÁC PHƯƠNG PHÁP DÙNG ĐỂ GIẢI QUYẾT

BI TOÁN 2.1 Các thuật toán được áp dụng

2.1.1 Thuật toán Sutherland – Hodgman

Chúng ta có thể hiệu chỉnh các thuật toán xén đoạn thẳng để xén đa giác bằng cách xem đa giác như là một tập các đoạn thẳng liên tiếp nối với nhau Tuy nhiên, kết quả sau khi xén nhiều khi lại là tập các đoạn thẳng rời nhau Điều chúng ta mong muốn ở đây đó là kết quả sau khi xén phải là một các đa giác để sau này có thể chuyển thành các vùng tô Thuật toán này sẽ tiến hành xén đa giác lần lượt với các biên cửa sổ Đầu tiên, đa giác sẽ được xén dọc theo biên trái của cửa sổ, kết quả sau bước này sẽ được dùng để xén tiếp biên phải, rồi cứ tương tự như vậy cho các biên trên, dưới Sau khi xén hết với bốn biên của cửa sổ, ta được kết quả cuối cùng

2.1.2 Thuật toán Cohen – Sutherland

Đây là một trong những thuật toán ra đời sớm nhất và thông dụng nhất Bằng cách kéo dài các biên của cửa sổ, người ta chia mặt phẳng thành chín vùng gồm cửa sổ và tám vùng xung quanh nó.Một con số 4 bit nhị phân gọi là mã vùng sẽ được gán cho mỗi vùng để mô tả vị trí tương đối của vùng đó so với cửa sổ Bằng cách đánh số từ 1 đến 4 theo thứ tự từ phải qua trái, các bit của mã vùng được dùng theo quy ước sau để chỉ một trong bốn vị trí tương đối của vùng so với cửa sổ bao gồm : trái, phải, trên, dưới

Trang 9

Bit 1 : trái (LEFT)

Bit 2 : phải (RIGHT)

Bit 3 : trên (TOP)

Bit 4 : dưới (BOTTOM)

Giá trị 1 tương ứng với vị trí bit nào trong mã vùng sẽ chỉ ra rằng điểm đó ở vị trí tương ứng, ngược lại bit đó sẽ được đặt bằng 0 Ví dụ một vùng có mã là

1001, thì nó sẽ nằm phía dưới (bit 4 bằng 1), bên trái (bit 1 bằng 1) so với cửa sổ, vùng có mã là 0000 chính là cửa sổ

Hình 2.1: Mô tả thuật toán Cohen-Sutherland

9

Trang 10

CHƯƠNG 3: CHƯƠNG TRÌNH V THỰC NGHIỆM

3.1 Code game:

-Dưới đây là một số phần code chính của game:

#include<stdio.h>

#include<GL/glut.h>

#include<math.h>

#define pi 3.142857

//Vs c và d se theo dõi lần lượt số lần nút b và n được bấm

//Biến left và right lần lượt là biến di chuyển phía trái và bên phải của người chơi int c = 0, d = 0, left = 0, right = 0;

int m = 0, j = 1, flag1 = 0, l = 1, flag2 = 0, n = 0, score = 0, count = 1;

// hàm myInit tạo ra khung bao quanh trò choi

void myInit (void)

{

//Đầu tiên ta sẽ đổi màu nền sang màu trắng bằng hàm glclear color và đổi màu

vẽ các đối tượng của game thành màu đỏ sử dụng he màu rgb bằng hàm glColor3f

glClearColor(1.0, 1.0, 1.0, 0.0);

glColor3f(1.0f, 0.0f, 0.0f);

//Kéo dài độ dài khung trò chơi 1 khoảng sao cho cách khung màn hình 1 khoảng nhất định bằng các hàm sau

glPointSize(1.0);

Trang 11

glLoadIdentity();

//áp dụng thuật toán southeland-hodgeman để xén khung trò chơi vào màn hình cửa sổ một kích thước toạ độ nhất định bằng hàm sau

gluOrtho2D(-620.0, 620.0, -340.0, 340.0);

}

//Hàm lập trình các nút điều khiển trò chơi

void keyboard(unsigned char key, int x, int y)

{

left = -200 + 200 * (d - c);

right = 200 + 200 * (d - c);

if (left == -600)

{

if (key == 110)

d++;

}

else if (right == 600)

{

if (key == 98)

c++;

}

11

Trang 12

{

if (key == 98)

c++;

if (key == 110)

d++;

}

glutPostRedisplay();

}

//Hàm hiện trò chơi cũng như sử dụng thuật toán Cohen - Sutherland để chèn bóng vào khung trò chơi hiện màn hình trò chơi

void myDisplay(void)

{

int x, y, k;

for (k = 0; k <= 400; k += 5)

{

glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_LINE_STRIP);

float i = 0;

m = m + 6;

n = n + 4;

while (i <= 2 * pi)

Trang 13

y = 12 + 20 * cos(i);

x = 20 * sin(i);

i = i + 0.1;

if (m == 288 && flag1 == 0)

{

j = -1;

m = -288;

flag1 = 1;

score++;

}

if (m == 288 && flag1 == 1)

{

j = 1;

m = -288;

flag1 = 0;

}

if (n == 580 && flag2 == 0)

{

l = -1;

n = -580;

flag2 = 1;

13

Trang 14

if (n == 580 && flag2 == 1)

{

l = 1;

n = -580;

flag2 = 0;

}

//Hàm để tính toán đường di chuyển hợp lý nhất cho bóng

glVertex2i((x - l * n), (y - j * m));

}

glEnd();

///hàm tạo cửa sổ trò chơi

glBegin(GL_LINE_LOOP);

glVertex2i(-600, -320);

glVertex2i(-600, 320);

glVertex2i(600, 320);

glVertex2i(600, -320);

glEnd();

// hàm vẽ hình chữ nhật chèn vào cửa sổ trò chơi

glBegin(GL_LINE_LOOP);

left = -200 + 200 * (d - c);

right = 200 + 200 * (d - c);

Trang 15

glVertex2i(left, -315);

glVertex2i(left, -295);

glVertex2i(right, -295);

glVertex2i(right, -315);

glEnd();

if ((j * m) == 276)

{

if ((left > ((-1 * l * n) + 20)) || (right < (-1 * l * n) - 20)) {

printf("Game Over !!!\nYour Score is :\t%d\n", score); exit(0);

}

}

glutSwapBuffers();

}

}

int main (int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

//Xác định kích thước cửa sổ cần chèn

glutInitWindowSize(1100, 600);

15

Trang 16

// Hàm áp dụng thuật toán Cohen-Sutherland chèn cửa sổ ngay chính giữa màn hình máy tính

glutInitWindowPosition(0, 0);

//Cài tên cửa sổ game

glutCreateWindow("Game");

//goi hàm lập trình thanh điều khiển

glutKeyboardFunc(keyboard);

// goi hàm init và hàm display

myInit();

glutDisplayFunc(myDisplay);

glutMainLoop();

}

Trang 17

3.2 Kết quả

3.2.1 Giao diện chính

Hình 3.1: Giao diện chính

Trên giao diện chính có các chức năng bao gồm: Màn hình hiển thị của trò chơi Người chơi bắt đầu trò chơi bấm bất kì nút A trên bàn phím để sang trái hay D

để sang phải Với mỗi lần người chơi đỡ bóng thành công thì người chơi sẽ được

2 điểm

17

Trang 18

3.2.2 Giao diện Game over

Hình 3.2: Giao diện game over

Nếu người chơi thất bại trong việc đỡ bóng thì màn hình game over sẽ hiện ra cùng với số điểm của người chơi đã ghi được

Trang 19

KẾT LUẬN

Trong thời gian nghiên cứu và vận dụng những kiến thức đã được trang bị ở nhà trường và các lĩnh vực khác Chúng em đã viết được game đỡ bóng nhằm mục đích giải trí lành mạnh Chúng em hy vọng rằng những khái niệm này là tiền đề giúp chúng em phát triển mạnh hơn về những thể loại game khác chất lượng hơn, hay hơn để phục vụ cho nhu cầu cuộc sống chúng ta.Trong quá trình thực hiện

đề tài, chúng em đã nhận được sự giúp đỡ tận tình của thầy Nguyễn Đình Thái giúp chúng em hoàn thành tốt báo cáo này Vì thời gian làm báo cáo hạn hẹp, kinh nghiệm thực tế chưa nhiều nên báo cáo không tránh khỏi những sai sót, rất mong sự đóng góp của thầy cô và các bạn để chúng em có thể hoàn thiện hơn đề tài của mình Trong quá trình thực hiện đề tài này có rất nhiều ý tưởng hay, độc đáo,…Nhưng do kiến thức của chúng em hạn hẹp và thời gian không cho phép nên chúng em chưa thể thực hiện những ý tưởng đó Tuy nhiên chúng em đã cố gắng xây dựng chương trình hoàn chỉnh nhất, đẹp nhất.Trong quá trình xây dựng chương trình,nhóm chúng em khó tránh khỏi những sai sót.Vì vậy chúng em rất mong rằng thầy và các bạn cùng đóng góp ý kiến giúp chúng em có thể hoàn thành sản phẩm một cách hoàn thiện nhất

19

Trang 20

TI LIỆU THAM KHẢO

[1] Cao Ngọc Ánh, Giáo trình đồ họa máy tính, NXB Khoa học kỹ thuật 2012 [2] Trần Giang Sơn, Đồ họa máy tính trong không gian hai chiều : Lý thuyết và thực hành, NXB Khoa học kỹ thuật 2008

[3] Trần Giang Sơn, Đồ họa máy tính trong không gian ba chiều : Lý thuyết và thực hành, NXB Khoa học kỹ thuật 2008

[4] Trịnh Thị Vân Anh, Giáo trình kỹ thuật đồ họa, Nhà xuất bản thông tin và truyền thông 2010

Ngày đăng: 22/01/2025, 15:07

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN