45
TRƯỜNG CĐ GIAO THÔNG VẬN TẢI KHOA CNTT Giáo viên hướng dẫn: Lê Thị Hường Sinh viên: Dương Thị Phượng lớp: 60CDT2

báo cáo dò mìn

Embed Size (px)

Citation preview

Page 1: báo cáo dò mìn

TRƯỜNG CĐ GIAO THÔNG VẬN TẢI

KHOA CNTT

Page 2: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

Giáo viên hướng dẫn: Lê Thị HườngSinh viên: Dương Thị Phượnglớp: 60CDT2

vĩnh yên, tháng 11 năm 2010

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

1

Page 3: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

LỜI NÓI ĐẦU

Để hoàn thành quá trình học tập, thực hiện kế hoạch của trường Cao đẳng Giao

Thông Vận tải, khoa Công Nghệ Thông Tin có yêu cầu tiến hành cho sinh viên

thực hiện quá trình thực tập cơ bản.

Việc thực tập cơ bản diễn ra trong 4 tuần, mỗi sinh viên có một đề tài và do

giáo viên hướng dẫn cho từng nhóm có đề tài giống nhau hay không giống

nhau.Giáo viên sẽ hướng dẫn và kiểm tra xem sinh viên đã làm được gì trong mỗi

tuần.Sau đó đánh giá vào quá trình thực tập của sinh viên ấy.

Để đảm bảo cho việc học tập được tốt. Mỗi học sinh, sinh viên cần phải nỗ lực

học tập và rèn luyện. Không những học tập tại lớp do thầy cô hướng dẫn giảng dạy

và truyền đạt những gì cần thiết cho việc học tập, ngoài ta chúng ta cần phải tìm

hiểu thêm về các bài tập, các kiến thức đã được học, để bổ trợ cho kiến thức của

mình và hiểu hơn về những gì thầy cô đã dạy.

Do đó việc tự học của sinh viên là một điều quan trong vì thời gian trên lớp

không nhiều nên thầy cô không thể truyền đạt đầy đủ mọi kiến thức cho chúng ta

vào việc học tập. Để có được kết quả tốt chúng ta cần phải tự học, phải tự nghiên

cứu và tìm hiểu thêm để biết những chổ chưa hiểu, nếu còn khúc mắc không làm

được để hỏi thầy cô, khi đó những vấn đề chưa hiểu sẽ được giải quyết.

Sau khi nhận đề tài :mô phỏng trò chơi DÒ MÌN .Em đã nghiên cứu và dưới

sự hướng dẫn của cô Lê Thị Hường em đã hoàn thành được đề tài của mình.

Em xin trình bày bài của mình!!

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

2

Page 4: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

CHƯƠNG I : TỔNG QUAN VỀ BÀI TOÁN

A. Đặt vấn đề

Tin học là nghành khoa học mũi nhọn phát triển hết sức nhanh chóng trong vài

chục năm gần đây,ngày nay nghành khoa học này càng được mở rộng lĩnh vực

nghiên cứu , ứng dụng trong mọi mặt của đời sống xã hội.

Trong vài thập kỷ gần đây , xã hội loài người có sự bùng nổ về thông tin , theo

quan điểm truyền thống 3 nhân tố cơ bản của nền kinh tế là điều kiện tự nhiên ,

nguồn lao động và vốn đầu tư. Ngày nay , ngoài 3 nhân tố then chốt đó còn có 1

nhân tố mới rất quan trọng đó là thông tin_một dạng tài nguyên mới.

Cùng với việc sang tạo ra công cụ mới là máy tính điện tử , con người cũng tập

trung trí tuệ xây dựng nghành khoa học tương ứng để đáp ứng nhu cầu khai thác

thông tin và tài nguyên thông tin.

Trong bối cảnh đó, nghành công nghệ thông tin được phát triển thành một nghành

khoa học với nội dung, đích phương pháp nghiên cứu riêng và ngày càng ứng dụng

trong hầu hết các lĩnh vực hoạt động của xã hội loài người.

Đặc biệt trong đời sống thực tế ngay nay, tin học được ứng dụng rất nhiều trong

đời sống giải trí. Nhiều trò chơi mới được viết bằng ngôn ngữ tin học xuất hiện,

đem lại sự đam me thích thú, khơi dậy sự sang tạo tìm tòi cho giới trẻ và toàn xã

hội. đặc biệt hơn với những ngôn ngữ lập trình dẽ hiểu ( như pascal) các bạn trẻ có

thẻ tự lập trình xây dựng lên những trò chơi đơn giản do chính mình thiết kế.

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

3

Page 5: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

Ví dụ : trò chơi ném bóng, trò chơi bắn máy bay,trò chơi xếp hình… và điển hình là

trò chơi Dò Mìn

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

4

Page 6: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

B. Tổng quan sơ lược về ngôn ngữ lập trình turbo c

Ngôn ngữ lập trình C là một ngôn ngữ mệnh lệnh được phát triển từ đầu thập niên

1970 bởi Ken Thompson và Dennis Ritchie để dùng trong hệ điều hành UNIX. Từ

dó, ngôn ngữ này đã lan rộng ra nhiều hệ điều hành khác và trở thành một những

ngôn ngữ phổ dụng nhất. C là ngôn ngữ rất có hiệu quả và được ưa chuộng nhất để

viết các phần mềm hệ thống, mặc dù nó cũng được dùng cho việc viết các ứng

dụng. Ngoài ra, C cũng thường được dùng làm phương tiện giảng dạy trong khoa

học máy tính mặc dù ngôn ngữ này không dược thiết kế dành cho người nhập môn.

C là một ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng và nó giống với ngôn ngữ Assembler hơn hầu hết các ngôn ngữ bậc cao. Hơn thế, C đôi khi được đánh giá như là "có khả năng di động", cho thấy sự khác nhau quan trọng giữa nó với ngôn ngữ bậc thấp như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì Assembler chỉ có thể chạy trong một số máy tính đặc biệt. Vì lý do này C được xem là ngôn ngữ bậc trung.

C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn với số lỗi ít hơn trong mẫu hình lập trình thủ tục mà lại không đặt gánh nặng lên vai người viết ra trình dịch C, là những người bề bộn với các đặc tả phức tạp của ngôn ngữ. Cuối cùng C có thêm những chức năng sau:

Một ngôn ngữ cốt lõi đơn giản, với các chức năng quan trọng chẳng hạn như là những hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ thư viện các thủ tục.

Tập trung trên mẫu hình lập trình thủ tục, với các phương tiện lập trình theo kiểu cấu trúc.

Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không có ý nghĩa thực dụng.

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

5

Page 7: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

Dùng ngôn ngữ tiền xử lý, tức là các câu lệnh tiền xử lý C, cho các nhiệm vụ như là định nghĩa các macro và hàm chứa nhiều tập tin mã nguồn (bằng cách dùng câu lệnh tiền xử lý dạng #include chẳng hạn).

Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua việc sử dụng kiểu dữ liệu pointer.

Số lượng từ khóa rất nhỏ gọn. Các tham số được đưa vào các hàm bằng giá trị, không bằng địa chỉ. Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho tính đóng và

tính đa hình. Hỗ trợ các bản ghi hay các kiểu dữ liệu kết hợp do người dùng từ khóa định

nghĩa struct cho phép các dữ liệu liên hệ nhau có thể được tập hợp lại và được điều chỉnh như là toàn bộ.

Một số chức năng khác mà C không có (hay còn thiếu) nhưng có thể tìm thấy ở các ngôn ngữ khác bao gồm:

An toàn kiểu , Tự động Thu dọn rác, Các lớp hay các đối tượng cùng với các ứng xử của chúng (xem thêm OOP), Các hàm lồng nhau, Lập trình tiêu bản hay Lập trình phổ dụng, Quá tải và Quá tải toán tử, Các hỗ trợ cho đa luồng, đa nhiệm và mạng.

Mặc dù C còn thiếu nhiều chức năng hữu ích nhưng lý do quan trọng để C được chấp nhận vì nó cho phép các trình dịch mới được tạo ra một cách nhanh chóng trên các nền tảng mới và vì nó cho phép người lập trình dễ kiểm soát được những gì mà chương trình (do họ viết) thực thi. Đây là điểm thường làm cho mã C chạy hiệu quả hơn các ngôn ngữ khác. Thường thì chỉ có ngôn ngữ ASM chỉnh bằng tay chạy nhanh hơn (ngôn ngữ C), bởi vì ASM kiểm soát được toàn bộ máy. Mặc dù vậy, với sự phát triển các trình dịch C, và với sự phức tạp của các CPU hiện đại, C đã dần thu nhỏ khoảng cách khác biệt về vận tốc này.

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

6

Page 8: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

Một lý do nữa cho việc C được sử dụng rộng rãi và hiệu quả là do các trình dịch, các thư viện và các phần mềm thông dịch của các ngôn ngữ bậc cao khác lại thường được tạo nên từ C.

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

7

Page 9: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

CHƯƠNG II : PHÂN TÍCH VÀ GIẢI THUẬT

1/ Luật lệ của game :

+ Game mô phỏng trò chơi dò mìn (Minesweeper)

*cách chơi: Người chơi khởi đầu với một bảng ô vuông trống thể hiện "bãi mìn". Click chuột vào một ô vuông trong bảng. Nếu không may trúng phải ô có

mìn (điều này ít xảy ra hơn) thì người chơi trò chơi kết thúc. Trường hợp thường xảy ra hơn là ô đó không có mìn và một vùng các ô sẽ được mở ra cùng với những con số. Số trên một ô là chỉ số ô có mìn trong cả thảy 8 ô nằm lân cận với ô đó.

Nếu chắc chắn một ô có mìn, người chơi đánh dấu vào ô đó bằng hình lá cờ (click chuột phải).

Trò chơi kết thúc với phần thắng dành cho người chơi nếu tìm được tất cả các ô có mìn và mở được tất cả các ô không có mìn.

2.Phân tích

Trước tiên phải khởi tạo đồ họa. Tiếp theo phải khai báo các thủ tục.Ta phải viết các chương trình con để tạo bệ súng,tạo máy bay,tạo đạn,vẽ bầu

trời đầy sao..sau đó lắp ghép lại với nhau để thành một chương trình hoàn chỉnh.Sau khi lắp ghép lại thì ta dùng sự kiện bàn phím để di chuyển bệ súng có thể đi lên, đi xuống, sang trái, sang phải, để bắn các máy bay đang di chuyển bằng phím Space.Khi mà một máy bay bị bắn trúng thì lại vẽ mới một máy bay mới và cập nhật.Cuối cùng là tổng kết lại kết quả bắn máy bay xem đã bắn trúng được bao nhiêu máy bay và đã đạt được bao nhiêu điểm, và có tiếp tục chơi nữa hay không.

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

8

Page 10: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

CHƯƠNG III. CẤU TRÚC CHƯƠNG TRÌNH

CODE Chương Trình:/*mo phong tro choi do min*/

#include <conio.h>#include <graphics.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <ctype.h>#include <dos.h>

int mouse_status;int mouse_x;int mouse_y;

int mouse_reset(void);void mouse_enable(void);void mouse_disable(void);void mouse_read_cursor(void);void mouse_horizontal_range(int xmin, int xmax);void mouse_vertical_range(int ymin, int ymax);

/************************************************************************** ** F U N C T I O N S ** **************************************************************************/

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

9

Page 11: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

/*----------------------------------------------------------------------*/

int mouse_reset(void){ _AX=0; geninterrupt(0x33); return(_AX);} /* mouse_reset */

/*----------------------------------------------------------------------*/

void mouse_enable(void){ _AX=1; geninterrupt(0x33);} /* mouse_enable */

/*----------------------------------------------------------------------*/

void mouse_disable(void){ _AX=2; geninterrupt(0x33);} /* mouse_disable */

/*----------------------------------------------------------------------*/

void mouse_read_cursor(void){ _AX=3; geninterrupt(0x33); mouse_status=_BX;

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

10

Page 12: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

mouse_x=_CX; mouse_y=_DX;} /* mouse_read_cursor */

/*----------------------------------------------------------------------*/

void mouse_horizontal_range(int xmin, int xmax){ _AX=7; _CX=xmin; _DX=xmax; geninterrupt(0x33);} /* mouse_vertical_range */

/*----------------------------------------------------------------------*/

void mouse_vertical_range(int ymin, int ymax){ _AX=8; _CX=ymin; _DX=ymax; geninterrupt(0x33);} /* mouse_vertical_range */#define YES 1#define NO 0

#define XPX 15 /* X pixels by square */#define YPX 15 /* Y pixels by square */

#define DEFCX 30 /* Default number of squares */#define DEFCY 28

#define MINE 255-'0' /* So that when it prints, it prints char 0xff */

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

11

Page 13: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

#define STSQUARE struct stsquare

STSQUARE { unsigned char value; /* Number of mines in the surround squares */ unsigned char sqopen; /* Square is open */ unsigned char sqpress; /* Square is pressed */ unsigned char sqmark; /* Square is marked */} *psquare;

#define value(x,y) (psquare+(x)*ncy+(y))->value#define sqopen(x,y) (psquare+(x)*ncy+(y))->sqopen#define sqpress(x,y) (psquare+(x)*ncy+(y))->sqpress#define sqmark(x,y) (psquare+(x)*ncy+(y))->sqmark

int XST, /* Offset of first pixel X */ YST, ncx, /* Number of squares in X */ ncy, cmines, /* Mines discovered */ initmines, /* Number of initial mines */ sqclosed, /* Squares still closed */ maxy; /* Max. number of y pixels of the screen */

void Graph_init(void);void Read_param(int argc, char *argv[]);void Set_mines(int nminas);void Set_square(int x, int y, int status);void Mouse_set(void);void Draw_squares(void);int Do_all(void);void Blow_up(void);void Open_square(int x, int y);

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

12

Page 14: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

int Open_near_squares(int x, int y);

/************************************************************************/

void main(int argc, char *argv[]){ int gd,gm; gd=DETECT,gm; initgraph(&gd,&gm,"d:\tc\bgi"); setcolor(2); rectangle(3,3,637,477); rectangle(2,2,638,478); rectangle(4,4,636,476); rectangle(5,5,635,475); rectangle(10,10,630,470); line(20,20,100,20); line(20,20,20,100); line(20,380,20,460); line(20,460,100,460); line(540,460,620,460); line(620,460,620,380); line(540,20,620,20); line(620,20,620,100); setcolor(5); settextstyle(1,0,1); outtextxy(180,20,"* * * * * * * * ^_^ * * * * * * * *"); setcolor(3); delay(1000); settextstyle(1,0,2); outtextxy(190,50,"CHUONG TRINH MO PHONG BANG DO HOA"); delay(1000);

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

13

Page 15: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

outtextxy(210,80,"Tro choi Do Min_MineSweeper"); delay(1000); settextstyle(1,0,7); setcolor(14); outtextxy(180,150,"D O M I N -- M I N E S W E E P E R"); delay(800); settextstyle(1,0,1); setcolor(5); outtextxy(170,210,"Giao vien huong dan : Le Thi Huong "); delay(500); outtextxy(170,230,"Nguoi thuc hien : Duong Thi Phuong "); delay(500); outtextxy(170,250,"Lop : 60CDT2 "); delay(500); outtextxy(170,270,"Khoa : Cong nghe thong tin "); delay(500); outtextxy(170,290,"Truong : Cao dang Giao thong van tai "); delay(500); settextstyle(2,0,5); setcolor(9); outtextxy(110,350,"Khi vao chuong trinh : "); delay(500); outtextxy(130,370," +) muon choi lai nhan phim bat ki de choi "); delay(500); outtextxy(130,390," +) muon thoat game ve chuong trinh ban dau nhan Esc "); delay(500); settextstyle(2,0,5); setcolor(10); outtextxy(90,415,"Nhan Enter de tiep tuc... "); getch(); closegraph; if (!mouse_reset()) { cputs(" ERROR: I can't find a mouse driver\r\n");

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

14

Page 16: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

exit(2); } Graph_init(); Read_param(argc, argv); Mouse_set(); do { randomize(); cleardevice(); Set_mines(cmines=initmines); mouse_enable(); Draw_squares(); } while (Do_all() != '\x1b'); closegraph();}

/************************************************************************** ** F U N C T I O N S ** **************************************************************************/

/*----------------------------------------------------------------------*/

void Graph_init(void){ int graphdriver=DETECT, graphmode, errorcode;

if(errorcode < 0) { cprintf("\n\rGraphics System Error: %s\n",grapherrormsg(errorcode));

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

15

Page 17: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

exit(98); } initgraph(&graphdriver, &graphmode, ""); errorcode=graphresult(); if(errorcode!=grOk) { printf(" Graphics System Error: %s\n",grapherrormsg(errorcode)); exit(98); } maxy=getmaxy();} /* Graph_init */

/*----------------------------------------------------------------------*/

void Read_param(int argc, char *argv[]){ int x, y, m;

x=y=m=0; if (argc!=1) { if (!isdigit(*argv[1])) {

closegraph(); cprintf("Usage is: %s [x] [y] [m]\r\n\n"

"Where x is the horizontal size\r\n" " y is the vertical size\r\n" " m is the number of mines\r\n\n" " Left mouse button: Open the square\r\n" "Right mouse button: Mark the square\r\n" " -The first time puts a 'mine' mark\r\n" " -The second time puts a 'possible "

"mine' mark\r\n" " -The third time unmarks the square\r\n" "Left+Right buttons: Open the surrounded squares only if "

"the count of mines\r\n"

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

16

Page 18: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

" is equal to the number in the square",argv[0]); exit (1);

} switch (argc) {

case 4: m=atoi(argv[3]); case 3: y=atoi(argv[2]); case 2: x=atoi(argv[1]);

} } XST=100; ncx=DEFCX; if (maxy==479) { YST=30; ncy=DEFCY; } else { YST=25; ncy=20; } if (x>0 && x<ncx) ncx=x; if (y>0 && y<ncy) { YST+=((ncy-y)*YPX)>>1; ncy=y; } initmines= m ? m : ncx*ncy*4/25; /* There are about 16% of mines */ if (((void near*)psquare=calloc(ncx*ncy, sizeof(STSQUARE)))==NULL) { closegraph(); cputs("ERROR: Not enought memory"); exit(3); }} /* Read_param */

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

17

Page 19: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

/*----------------------------------------------------------------------*/

void Set_mines(int nminas){ STSQUARE *p; int i, x, y, a, b;

sqclosed=ncx*ncy-nminas; p=psquare; for (i=ncx*ncy; i>0; i--, p++) p->value = p->sqopen = p->sqpress = p->sqmark = NO; for (i=nminas; i>0; i--) { while (value(x=random(ncx), y=random(ncy)) == MINE)

; value(x,y)=MINE; } for (x=ncx-1; x>=0; x--) { for (y=ncy-1; y>=0; y--) {

if (value(x,y) == MINE) continue; a=x-1; b=y-1; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE); a++; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE); a++; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE); b++; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE);

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

18

Page 20: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

a-=2; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE); b++; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE); a++; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE); a++; if (a>=0 && b>=0 && a<ncx && b<ncy) value(x,y)+=(value(a,b) == MINE);

} }} /* Set_mines */

/*----------------------------------------------------------------------*/

/* If status=1 then draw the square up, if it's 0 then draw it down*/void Set_square(int x, int y, int status){ int xl, xr, yt, yb;

mouse_disable(); xl=XST+XPX*x; xr=xl+XPX-1; yt=YST+YPX*y; yb=yt+YPX-1; setfillstyle(SOLID_FILL, LIGHTGRAY); bar(xl, yt, xr, yb); if (status) {

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

19

Page 21: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

setcolor(WHITE); line(xl,yt,xl,yb-1); line(xl,yt,xr-1,yt); setcolor(DARKGRAY); line(xr,yb,xl,yb); line(xr,yb,xr,yt); switch (sqmark(x,y)) {

case 2 : setfillstyle(SOLID_FILL, LIGHTBLUE); setcolor(LIGHTBLUE); break;

case 1 : setfillstyle(SOLID_FILL, LIGHTRED); setcolor(LIGHTRED); break;

default: setcolor(LIGHTGRAY); } fillellipse(XST+XPX*x+XPX/2, YST+YPX*y+YPX/2, 3, 3); switch (sqmark(x,y)) {

case 2 : case 1 : setfillstyle(SOLID_FILL, YELLOW);

setcolor(YELLOW); fillellipse(XST+XPX*x+XPX/2, YST+YPX*y+YPX/2, 1, 1);

} } else { sqclosed--; setcolor(DARKGRAY); line(xl,yt,xl,yb); line(xl,yt,xr,yt); } mouse_enable();} /* Set_square */

/*----------------------------------------------------------------------*/

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

20

Page 22: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

void Mouse_set(void){ mouse_horizontal_range(XST, XST+XPX*ncx-3); mouse_vertical_range(YST, YST+YPX*ncy-3);} /* Mouse_set */

/*----------------------------------------------------------------------*/void Draw_squares(void){ int x, y; mouse_disable(); for (x=0; x<ncx; x++) for (y=0; y<ncy; y++)

Set_square(x,y,1); mouse_enable();} /* Draw_squares */

/*----------------------------------------------------------------------*/

/* Here we do all the job*/int Do_all(void){ int x, y, xant=-1, yant, mlstant, mrstant, cminasant=0, ttrans, tant=0; long tst, tact; char str[] ="xxxxx: 0000",

blk[] ="ÛÛÛÛÛÛÛÛÛÛÛ";

mouse_enable(); time(&tst); while (!kbhit()) {

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

21

Page 23: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

if (!sqclosed && !mouse_status) { /* All mines discovered */ settextjustify(LEFT_TEXT, CENTER_TEXT); setcolor(BLACK); outtextxy(0, maxy/2-10, blk); sprintf(str,"Mines: 0"); setcolor(LIGHTRED); outtextxy(0, maxy/2-10, str); settextjustify(LEFT_TEXT, CENTER_TEXT); setcolor(BLACK); outtextxy(0, maxy/2+10, blk); sprintf(str," Time: %4d",ttrans); setcolor(LIGHTGREEN); outtextxy(0, maxy/2+10, str); for (x=ncx-1; x>=0; x--) for (y=ncy-1; y>=0; y--) if (value(x,y)==MINE) {

sqmark(x,y)=1; Set_square(x,y,1);

} break;

} if (cminasant != cmines) { /* Update Mines: */

cminasant=cmines; settextjustify(LEFT_TEXT, CENTER_TEXT); setcolor(BLACK); outtextxy(0, maxy/2-10, blk); sprintf(str,"Mines: %4d",cmines); setcolor(LIGHTRED); outtextxy(0, maxy/2-10, str);

} if (tant != (ttrans=(int)(time(&tact)-tst))) { /* Update Time: */

tant=ttrans; settextjustify(LEFT_TEXT, CENTER_TEXT);

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

22

Page 24: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

setcolor(BLACK); outtextxy(0, maxy/2+10, blk); sprintf(str," Time: %4d",ttrans); setcolor(LIGHTRED); outtextxy(0, maxy/2+10, str);

} mouse_read_cursor(); mouse_status&=3; x=(mouse_x-XST)/XPX; y=(mouse_y-YST)/YPX; if (xant == -1) {

xant=x; yant=y;

} if (x!=xant || y!=yant) { /* Position change */

if (sqpress(xant,yant) && !sqopen(xant,yant)) { sqpress(xant,yant)=NO; Set_square(xant,yant,1); } xant=x; yant=y;

} if (!mouse_status)

mlstant=mrstant=0; if ((mouse_status == 2) &&

!sqopen(x,y) && mlstant!=mouse_status) { /* Right button pressed */ mlstant=mouse_status; mouse_disable(); switch (sqmark(x,y)=(sqmark(x,y)+1) % 3) { case 1 : cmines--; break; case 2 : cmines++; }

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

23

Page 25: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

Set_square(x,y,1); mouse_enable();

} else if (mouse_status==1 && /* Left button pressed */

!sqopen(x,y) && !sqpress(x,y) && /* And square not pressed */ sqmark(x,y)!=1) { sqpress(x,y)=YES; Set_square(x,y,0);

} else if (!mouse_status && /* Left button released */

!sqopen(x,y) && sqpress(x,y) && sqmark(x,y)!=1) { /* Open the square */ if (value(x,y) == MINE) { Blow_up(); break; } else Open_square(x,y);

} else if (mouse_status==3 &&

sqopen(x,y) && mrstant!=mouse_status) { /* Open near squares */ mrstant=mouse_status; if (Open_near_squares(x,y) == YES) { Blow_up(); break; }

} } mouse_disable(); return (getch());

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

24

Page 26: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

} /* Do_all */

/*----------------------------------------------------------------------*/

void Blow_up(void){ int x, y, xl, yt, xr, yb;

mouse_disable(); for (x=0; x<ncx; x++) { for (y=0; y<ncy; y++) {

if (value(x,y) == MINE) { settextjustify(CENTER_TEXT, CENTER_TEXT); setcolor(LIGHTRED); outtextxy(XST+XPX*x+XPX/2-1, YST+YPX*y+YPX/2, "Û"); setcolor(BLACK); outtextxy(XST+XPX*x+XPX/2, YST+YPX*y+YPX/2+1, "*"); } else if (sqmark(x,y)==1) { setcolor(YELLOW); xl=XST+XPX*x; xr=xl+XPX-1; yt=YST+YPX*y; yb=yt+YPX-1; line(xl,yt,xr,yb); line(xl,yb,xr,yt); }

} }} /* Blow_up */

/*----------------------------------------------------------------------*/

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

25

Page 27: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

void Open_square(int x, int y){ char num[2]="0"; int a, b, c;

sqopen(x,y)=YES; if ((num[0]=value(x,y)) != 0) { num[0]+='0'; switch(num[0]) {

case '1' : c=LIGHTBLUE; break; case '2' : c=LIGHTGREEN; break; case '3' : c=YELLOW; break; case '4' : c=LIGHTRED; break; default : c=LIGHTMAGENTA;

} mouse_disable(); setcolor(c); settextjustify(CENTER_TEXT, CENTER_TEXT); outtextxy(XST+XPX*x+XPX/2, YST+YPX*y+YPX/2+1, num); mouse_enable(); } else { /* Open near squares if the current number is 0 */ a=x-1; b=y-1; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} a++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0);

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

26

Page 28: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

Open_square(a,b); } a++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} b++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} a-=2; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} b++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} a++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} a++;

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

27

Page 29: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

Set_square(a,b,0); Open_square(a,b);

} }} /* Open_square */

/*----------------------------------------------------------------------*//* Open the sorrounded squares. Returns != 0 if I activated a mine*/int Open_near_squares(int x, int y){ int a, b, suma=0;

a=x-1; b=y-1; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; a++; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; a++; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; b++; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; a-=2; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; b++;

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

28

Page 30: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; a++; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; a++; if (a>=0 && b>=0 && a<ncx && b<ncy && sqmark(a,b)==1) suma++; if (suma == value(x,y)) { suma=0; a=x-1; b=y-1; if (a>=0 && b>=0 && a<ncx &&b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} a++; if (a>=0 && b>=0 && a<ncx &&b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} a++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} b++;

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

29

Page 31: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} a-=2; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} b++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} a++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

} a++; if (a>=0 && b>=0 && a<ncx && b<ncy && !sqopen(a,b) && sqmark(a,b)!=1) {

suma|=(value(a,b)==MINE); Set_square(a,b,0); Open_square(a,b);

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

30

Page 32: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

} return (suma); } else return 0;} /* Open_near_squares */

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

31

Page 33: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

CHƯƠNG IV: TỔNG KẾT

Em xin trình bày những mặt đạt được và chưa đạt được trong đợt thực tập lần này:

Ưu điểm:

Đã xây dựng được chương trình trò chơi dò mìn.Tạo được code chương trình.Khởi tạo được đồ họa trong turbo cNói chung đã hoàn thành cơ bản yêu cầu của đề tài.

Nhược điểm:

Không xử lí được mạng quá lớn.Chương trình ứng dụng còn đơn giản.Cách trình bày vẫn còn thiếu xót.

Sau khi hoàn thành đề tài em đã rút ra được nhiều bài học quý báu cho bản than,năng cao được kiến thức và có them kinh nghiệm cho những đề tài sau này.

Trong quá trình thực hiện đề tài em đã nhận được sự hướng dẫn nhiệt tình của cô Lê Thị Hường và các thầy cô giáo trong khoa, do đó em đã hoàn thành đề tái “xây dựng trò chơi dò mìn”.

Tuy nhiên kiến thức còn hạn hẹp nên đè tài vẫn còn thiếu xót rất mong sự đóng góp ý kiến của thầy cô giáo và các bạn để đề tài của em ngày càng hoàn thiện hơn.

Em xin chân thành cảm ơn.

Tài liệu tham khảo:

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

32

Page 34: báo cáo dò mìn

Đề tài: xây dựng chương trình dò mìn báo cáo thực tập

-ngôn ngữ lập trình c.( bộ giáo dục và đào tạo)-bài tập ngôn ngữ lập trình c( bộ giáo dục và đào tạo)-internet

SVTH: Dương Thị Phượng_60CĐT2GVHD:Lê Thị Hường

33