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

TRÒ CHƠI CỜ CARO GIỮA 2 NGƯỜI TRÊN MÁY TÍNH

12 3,8K 2
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

Định dạng
Số trang 12
Dung lượng 97,5 KB

Nội dung

TRÒ CHƠI CỜ CARO GIỮA 2 NGƯỜI TRÊN MÁY TÍNH

TRỊ CHƠI CỜ CARO GIỮA 2 NGƯỜI TRÊN MÁY TÍNH LỜI NĨI ĐẦU Ngơn ngữ lập trình C là một ngơn ngữ mạnh, được các nhà tin học chun nghiệp cũng như các nhà lập trình nghiệp dư sử dụng để lập trình hệ thống, lập trình ứng dụng… Vì vậy nhu cầu học C là một nhu cầu tất yếu, nhất là các kỹ sư, các sinh viên của nhiều chun ngành khoa học và kỹ thuật khác nhau. Để giúp sinh viên hiểu rõ về ngơn ngữ này và nâng cao thêm kỹ năng lập trình của mình, Khoa Cơng Nghệ Tin Học của Viện Đại Học Mở Hà Nội đã đưa ra các đề tài và giao cho sinh viên thực hiện trong kỳ thi tốt nhiệp. Em là Nguyễn Quang Hưng được giao thực hiện đề tài chơi cờ caro giữa 2 người với nhau trên máy tính. Chương trình chơi cờ caro trên máy tính là một trong những đề tài rất khó đối với một sinh viên mới bước vào lập trình như em. Song với nỗ lực của bản thân cũng như sự hướng dẫn nhiệt tình của GS.TS. Phạm Văn Ất, em đã hồn thành chương trình này sau một tháng. Chương trình sau khi hồn thành những chức năng bản sau: - Cho phép nhập tên người chơi. - Cho phép người chơi dùng bàn phím để di chuyển con trỏ và đánh qn cờ của mình ở vị trí mong muốn. - Cho phép người chơi hỗn một nước sau mỗi lần đánh. - Trong lúc chơi, cho phép hủy bỏ ván đang chơi để chơi lại từ đầu hoặc thốt ra ngồi. - Báo hiệu chiến thẳng và nâng tỷ số cho người thắng sau mỗi ván chơi. Do trình độ và thời gian hạn chế nên chương trình chưa được hồn hảo. Em rất mong nhận được những ý kiến đóng góp của các thầy và các bạn.Em xin chân thành cảm ơn! 2 PHẦN I: GIỚI THIỆU CHƯƠNG TRÌNH Nội dung chương trình: Xây dựng chương trình chơi cờ caro (để 2 người chơi với nhau) gồm các nội dung sau: 1. Vẽ bàn cờ . 2. Hiển thj 2 ký hiệu (ví dụ O và X) để người đi trước chọn. Nhập họ tên của từng người chơi. 3. Cho phép người chơi dùng các phím mũi tên hoặc dùng chuột để di chuyển con trỏ đến các ô trên bàn cờ. 4. Cho phép dùng phím Enter để chọn ô rỗng đang chứa con trỏ. Đánh dấu được chọn bằng 1 trong 2 ký tự chon trong mục 2. 5. Cho phép hoãn sau một nước. 6. Sau mỗi nước chương trình kiểm tra xem đã ai thắng cuộc hay chưa. Nếu người thắng, chương trình thông báo họ tên người thắng và kết thúc một ván, trái lại trò chơi được tiếp tục. 7. Sau khi kết thúc một ván, chương trình sẽ cho người chơi tiếp hay kết thúc, tùy theo sự lựa chọn của người chơi. 8. Khi đang chơi, người chơi thể kết thúc chương trình bằng cách bấm một phím đặc biệt nào đó (ví dụ CTRL Q) Ngôn ngữ thực hiện: turbo C 3 PHẦN II: THIẾT KẾ CHƯƠNG TRÌNH Sau khi nghiên kỹ đề tài, chúng em đã vạch ra được một phương hướng thiết kế chương trình như sau: 1. Vẽ bàn cờ 12x12 ơ vng (số ơ vng thể thay đổi đựoc theo mã nguồn) trên nền của cửa sổ. 2. Chương trình được tổ chức thành các module các hàm liên quan: + Khai báo các mảng 1 chiều ht1[], ht2[] để lưu tên người chơi, mảng 2 chiều a[][] để lưu vị trí các ơ trong bàn cờ.Tọa độ này thay đổi theo khi ta di chuyển các phím mũi tên trên bàn phím. + Các thuộc tính xcu,ycu dùng để xóa qn cờ vừa đánh mỗi khi 1 người xin hỗn lượt đi vừa xong. + Các hàm thành viên + Hàm ve() và an() dùng để vẽ và ẩn điểm trong q trình điểm chuyển động. + Hàm xanh() và trang() để vẽ và xử lý qn cờ xanh và qn cờ trắng mỗi khi gọi đến. Lời gọi đến các hàm này được mặc định bởi phím Enter. Phím này được cài đặt trong hàm dcd(). + Hàm dcd() (điểm chuyển động) dùng để di chuyển điểm trỏ trên bàn cờ và đánh qn cờ mỗi khi phím Enter được gõ. Ngồi ra hàm này còn các chức năng hỗn một nước sau khi đánh, thốt và giới hạn phạm vi di chuyển của điểm trỏ. + Hàm taomang_kiemtra() dùng để kiểm tra xem sau mỗi lượt đánh đã 5 ơ liền nhau cùng màu theo các chiều trên bàn cờ khơng. + Hàm choilai() hàm này gần giống với hàm main(), nó chỉ khác ở chỗ bỏ qua thủ tục nhập tên hai người chơi mỗi khi kết thúc một ván và chơi lại từ đầu. Hàm này còn đóng vai trò thay đổi tỷ số sau khi kết thúc ván cờ vừa chơi . + Hàm ktdh() để khởi tạo màn hình đồ họa + Hàm main() là chương trình chính dùng để tên 2 người chơi, vẽ bàn cờ, khởi tạo con trỏ và gọi đến các hàm 3. Các vấn đề đáng chú ý trong chương trình là khả năng nhận biết 1 ơ đã qn cờ được đánh, cho phép hỗn 1 nước và cách xác định chiến thắng cũng như hiện tỷ số sau mỗi ván 4 PHẦN III: CÀI ĐẶT VÀ HƯỚNG DẪN SỬ DỤNG CHƯƠNG TRÌNH + Chạy file cocaro.exe. + Sau khi chạy file cocaro.exe chương trình sẽ hiện cho người chơi giao diện để nhập tên người chơi. Người chơi nhập nhập tên rồi nhấn Enter để bắt đầu chơi. + Giao diện dành cho 2 người chơi gồm 1 bàn cờ 12x12 ô vuông. + Luật chơi là mỗi người người sử dụng 1 quân cờ (O hoặc X), lần lượt mỗi người đánh mỗi lần đánh 1 quân. Người thắng cuộc là người 5 quân cờ liền nhau theo các chiều trên bàn cờ. + Tên người thắng và tỉ số giữa 2 người chơi sẽ được hiện ra. + Trong khi chơi ngừơi chơi thể thoát ra ngoài bằng phím ESC. Các hàm và thủ tục sủ dụng trong chương trình: void ve(int m); void an(); void xanh(); void trang(); void dcd(int tc); void taomang_kiemtra(); void choilai(char ht1[],char ht2[]); void ktdh(); void main(); Dưới đây là mã nguồn chính của chương trình. /*Chuong trinh choi co ca ro giua 2 nguoi voi nhau tren may tinh.*/ #include<graphics.h> #include<conio.h> #include<math.h> #include<stdio.h> #include<string.h> #include<dos.h> #include<ctype.h> int nguoi1=0,nguoi2=0; char ht1[30],ht2[30]; int a[12][12]; //mang luu vi tri cac o trong ban co int x,y,m,xcu,ycu; int trangdi,xanhdi; int kiemtra ; int n; int dx,dy,odadanh=0; char traloi; char ss[30],*s ; //khai bao toa do ban dau int i,to=30; int x0=100,x01=100,y0=50,y01=50,x1=460,y1=410; void ve(int m); void an(); void xanh(); void trang(); void dcd(int tc); void taomang_kiemtra(); void choilai(char ht1[],char ht2[]); /***********XAY DUNG CAC HAM VA PHUONG THUC**************************/ void ve(int m) 5 { setcolor(m); putpixel(x,y,m); } /**********************************************************************/ void an() { putpixel(x,y,getbkcolor()); } /*********************************************************************/ //Ve va xu ly quan co xanh void xanh() { if((getpixel(x+7,y+7)==1)||(getpixel(x+7,y+7)==15)) { odadanh=1; } else { odadanh=0; setcolor(1); circle(x,y,7); xcu=x;ycu=y; //bao hieu thang taomang_kiemtra(); if(kiemtra==1) { setcolor(11),settextstyle(3,0,4); s=" thang!Xin chuc mung."; strcpy(ss,ht2); strcat(ss,s); outtextxy(100,410,ss); sound(500);delay(500);nosound();delay(10); sound(550);delay(500);nosound();delay(10); sound(600);delay(500);nosound();delay(10); nguoi2++; setcolor(9),settextstyle(1,0,1); outtextxy(100,450,"Choi tiep?(C=co/Esc=thoat)"); traloi=getch(); if(traloi=='c') { choilai(ht1,ht2); } else exit(0); } } if(odadanh==0) { trangdi=1; xanhdi=0; } } /************************************************************************/ //ve va xu ly quan co trang void trang() { 6 //ve anh tai vi tri diem tro if((getpixel(x+7,y+7)==15)||(getpixel(x+7,y+7)==1)) { // putchar(7); odadanh=1; } else { odadanh=0; setcolor(15); line(x-7,y-7,x+7,y+7); line(x+7,y-7,x-7,y+7); xcu=x;ycu=y; taomang_kiemtra(); if (kiemtra==2) { setcolor(11),settextstyle(3,0,4); s=" thang!Xin chuc mung."; strcpy(ss,ht1); strcat(ss,s); outtextxy(100,410,ss); sound(500);delay(500);nosound();delay(10); sound(550);delay(500);nosound();delay(10); sound(600);delay(500);nosound();delay(10); nguoi1++; setcolor(9),settextstyle(1,0,1); outtextxy(100,450,"Choi tiep?(C=co/Esc=thoat)"); traloi=getch(); if(traloi=='c') { setcolor(1);setfillstyle(1,1);bar(99,410,600,480); choilai(ht1,ht2); } else exit(0); } } if(odadanh==0) { trangdi=0; xanhdi=1; } } /************************************************************************** */ void dcd(int tc) { int i,j; int dx,dy; char ch; trangdi=xanhdi=1; while(1) { dx=0;dy=0; ve(14); ch=getch(); if(ch==27) exit(0); if(ch==80) dy=1; if(ch==72) dy=-1; if(ch==77) dx=1; if(ch==75) dx=-1; 7 if((ch==13)&&(trangdi==1)) {trang();} if((ch==13)&&(xanhdi==1)) { xanh();} //hoan mot nuoc if(toupper(ch)=='B') { setcolor(6);setfillstyle(1,6);pieslice(xcu,ycu,0,360,10); if(trangdi==0) { trangdi=1;xanhdi=0; } else { xanhdi=1;trangdi=0; } } if(toupper(ch)=='C') { choilai(ht1,ht2); } an(); ve(6); x+=tc*dx; y+=tc*dy; //con tro khong ra khoi ban co if(x>460) x=445; if(y<50) y=65; if(y>410) y=395; if(x<100) x=115; } } /**********************************************************************/ void taomang_kiemtra() { int i,j; int xmau,ymau; kiemtra=0; xmau=90;ymau=50+20; for (i=1;i<=12;i++) { xmau+=30; for (j=1;j<=12;j++) { a[i][j]=getpixel(xmau,ymau); ymau+=30; if (ymau>30*14) ymau=50+20; } } //kiem tra du 5 quan co? for (i=1;i<=12;i++) for (j=1;j<=12;j++) { if( ((a[i][j]==1)&&(a[i][j+1]==1)&&(a[i][j+2]==1)&&(a[i][j+3]==1)&&(a[i] [j+4]==1))|| ((a[i][j]==1)&&(a[i+1][j]==1)&&(a[i+2][j]==1)&&(a[i+3] [j]==1)&&(a[i+4][j]==1))|| ((a[i][j]==1)&&(a[i+1][j+1]==1)&&(a[i+2][j+2]==1)&&(a[i+3] [j+3]==1)&&(a[i+4][j+4]==1))|| 8 ((a[i][j]==1)&&(a[i+1][j-1]==1)&&(a[i+2][j-2]==1)&&(a[i+3][j- 3]==1)&&(a[i+4][j-4]==1)) ) kiemtra=1; if( ((a[i][j]==15)&&(a[i][j+1]==15)&&(a[i][j+2]==15)&&(a[i] [j+3]==15)&&(a[i][j+4]==15))|| ((a[i][j]==15)&&(a[i+1][j]==15)&&(a[i+2][j]==15)&&(a[i+3] [j]==15)&&(a[i+4][j]==15))|| ((a[i][j]==15)&&(a[i+1][j+1]==15)&&(a[i+2][j+2]==15)&&(a[i+3] [j+3]==15)&&(a[i+4][j+4]==15))|| ((a[i][j]==15)&&(a[i+1][j-1]==15)&&(a[i+2][j-2]==15)&&(a[i+3][j- 3]==15)&&(a[i+4][j-4]==15)) ) kiemtra=2; } } /*********************************************************************/ void choilai(char ht1[],char ht2[]) { gotoxy(7,6); printf("\n Ty so:"); printf("\n %-8s:%2d",ht1,nguoi1); printf("\n %-8s:%2d",ht2,nguoi2); //ve ban co to=30; x0=100;x01=100;y0=50;y01=50;x1=460;y1=410; setfillstyle(1,6); bar(100,50,460,410); //Ke 12x12 o vuong for(i=0;i<=12;++i) { setcolor(4); line(x0,y0,x0,y1); line(x01,y01,x1,y01); x0+=to; y01+=to; } //Khai bao va tao cuoc choi dcd(30); } /**********************************************************************/ void ktdh() { int mh=0,md=0;initgraph(&mh,&md,"c:\\tc\\bgi"); } /**********************************************************************/ void main() { ktdh(); setbkcolor(1); //Nhap ten settextstyle(0,0,1); setcolor(4);outtextxy(10,20,"PLAYER 1:"); printf("\n\n ");fflush(stdin);gets(ht1); printf("\n ");setcolor(4);outtextxy(10,50,"PLAYER 2:"); 9 fflush(stdin);gets(ht2); setcolor(11);line(1,85,90,85); //Ty so ban dau printf("\n Ty so:"); printf("\n %-8s:%2d",ht1,nguoi1); printf("\n %-8s:%2d",ht2,nguoi2); setcolor(11);line(1,85,90,85);line(1,150,90,150); //ve ban co //trang tri setfillstyle(1,6); bar(100,50,460,410); setcolor(15);rectangle(99,49,461,411); setcolor(15);rectangle(461,49,560,411); setfillstyle(1,11); bar(462,50,559,410); setcolor(1);circle(510,90,30); setcolor(1);circle(510,370,30); setcolor(5);settextstyle(4,0,5); outtextxy(500,120,"C"); outtextxy(500,150,"O"); outtextxy(500,190,"C"); outtextxy(500,220,"A"); outtextxy(500,260,"R"); outtextxy(500,290,"O"); setcolor(12),settextstyle(4,0,6); outtextxy(500,340,"5"); setcolor(11); //Ke 12x12 o vuong for(i=0;i<=12;++i) { setcolor(4); line(x0,y0,x0,y1); line(x01,y01,x1,y01); x0+=to; y01+=to; } setcolor(12);settextstyle(3,0,2); outtextxy(1,160,"NOTE:"); setcolor(11);settextstyle(3,0,2); outtextxy(1,180,"Esc=Quit"); outtextxy(1,200,"B=Stepbk"); outtextxy(1,220,"C=Replay"); setcolor(5); line(1,300,90,300); //Khai bao va tao cuoc choi dcd(30); closegraph(); } /****************************HET***************************************/ 10 [...]...KẾT LUẬN Đây là chương trình được em thực hiện sau 1 tháng, chương trình đã đáp ứng được các chức năng bản của 1 chương trình chơi cờ caro giữa 2 người trên máy tính điện tử.Tuy nhiên đây chỉ là 1 chương trình mô phỏng nên giao diện và một số chức năng còn chưa hoàn thiện.Cách xác định chiến thắng còn chưa tối ưu Trong chương trình sử dụng... hàng.Các hàm này nằm trong thư viện DOS.H Chương trình hơi dài do sử dụng đến các hàm đồ họa giống nhau để trang chí bàn cờ cho đẹp.Phương hướng của sắp tới của em là tối ưu hóa chương trình,phát triển chương trình hoàn hảo hơn và giao diện đẹp hơn nhằm đáp ứng được yêu cầu của 1 trò chơi giải trí của giới trẻ sau những giờ học căng thẳng Chương trình được hoàn thành với sự giúp đỡ nhiệt tình của GS.TS.Phạm... thẳng Chương trình được hoàn thành với sự giúp đỡ nhiệt tình của GS.TS.Phạm Văn Ất Cũng nhân dịp này em xin cảm ơn tới thầy hướng dẫn của mình và các bạn đã giúp đỡ em hoàn thành chương trình 11 MỤC LỤC 12 . Quang Hưng được giao thực hiện đề tài chơi cờ caro giữa 2 người với nhau trên máy tính. Chương trình chơi cờ caro trên máy tính là một trong những đề tài rất. đầu chơi. + Giao diện dành cho 2 người chơi gồm 1 bàn cờ 12x 12 ô vuông. + Luật chơi là mỗi người người sử dụng 1 quân cờ (O hoặc X), lần lượt mỗi người

Ngày đăng: 24/04/2013, 16:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w