Bạn thử thêm getch() vào sau hàm closegraph() trong hàm main() xem.Nếu muốn trông đẹp thì phải viết từ game over trong chế độ đồ họa.
em đang làm bài tập về đổ họa nhưng không biết phải làm thế nao.
đề bài: viết chương trình tao chữ ngẫu nhiên rớt xuống từ từ, nếu ký tự người dùng nhập vào trùng với ký tự rớt xuống thì tạo chữ ngẫu nhiên khác. nếu chữ rớt xuống hết màn hình hoặc ký tự nhập vào khác với ký tự rớt xuống thì game kết thúc.
code:
C++ Code:
#include<iostream.h> #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> int key=1; int y=1,x; char kt; void taochu(); void drop(char &kt); void main() { clrscr(); int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "d:\\borlandc\\bgi"); taochu(); closegraph(); } //-------------------------------------------------------------------------- //------------------cho chu rot void drop(char &kt) { x=random(600);//tao ngau nhien toa do x do { outtextxy(x,y,&kt); delay(10); y++; //y chay thu 1 den 480 if (kbhit()) //neu kbhit thi vo day { if(key==kt) { cleardevice(); taochu(); } } cleardevice(); }while(y!=480&&!kbhit()) ; //trong khi y#480 va chua an ban phim //thi chu van rot if (kbhit()==kt||y!=480) //neu chu chay den het //hoac kbhit khac chu rot xuong { closegraph(); getch(); } } //------------------------------------------------------- //---------------tao chu ngau nhien void taochu() { setcolor(9);//set mau cho chu randomize(); kt= random (25)+97;//tao ngau nhien ky tu settextstyle(7,0,5);//set kieu chu drop(kt); }
em thấy em sai ở hàm drop() nhưng em sửa kiểu nào nó cũng xuât ra chữ game over!!!
Chú ý: Lần sau nhớ bỏ code vào thẻ [ c o d e ] [ / c o d e ]
Posted by: iamvtn
Đã được chỉnh sửa lần cuối bởi iamvtn : 13-11-2007 lúc 05:37 PM.
Bạn thử thêm getch() vào sau hàm closegraph() trong hàm main() xem.Nếu muốn trông đẹp thì phải viết từ game over trong chế độ đồ họa.
Em đã thử rồi. nếu thêm getch() vào sau hàm closegraph() trong hàm main() thì cũng vậy. chỉ mất công gõ thêm một kí tự bất kì vào để thoát ra thôi.
mấy anh nhớ đọc kĩ : " nếu ký tự người dùng nhập vào trùng với ký tự rớt xuống thì tạo chữ ngẫu nhiên khác. nếu chữ rớt xuống hết màn hình hoặc ký tự nhập vào khác với ký tự rớt xuống thì game kết thúc"
Dr thấy là chương trình của bạn chưa có logic để thực hiện.
Dr gợi ý và nhận xét cho bạn như sau:
Thứ nhất: function drop nên chỉ thực hiện một việc đó là thả ký tự từ y(min) đến y(max).
Thứ 2: Hàm taochu của bạn làm 2 việc đó là: Tạo ra ký tự và thả ký tự đó. Dr nghĩ nếu là taochu thì chỉ nên làm một nhiệm vụ đó là tạo chữ thôi.
Thứ 3: Thiếu nguyên một hàm kiểm tra phím nhập vào có trùng với phím đang được thả hay không.
Cuối cùng: Bạn thực hiện xử lý không chuyên biệt các hàm, dẫn đến tình trạng thừa vẫn thừa, mà thiếu vẫn thiếu.
Nếu vẫn còn khó khăn, vui lòng không ngần ngại gửi lên để được giúp đỡ nhưng nhớ rằng bài gửi sau của bạn phải đủ để thấy được sự cố gắng và tiến bộ hơn mới có thể nhận được câu trả lời tuyệt vời được.
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667 (Office: 04 6329 2380)
Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)
Bạn nên sử dụng đến thời gian hệ thống.
1.Kiểm tra (t_current -t_drop -> deltat_drop) -> xuất tiếp chữ nếu không có phím nhập vào hoặc lượng chữ ít hơn so với mặc định(tức bạn nhập đúng ký tự.
2.Kiểm tra (t_current -t_key -> deltat_key) -> tăng tốc độ rơi(tăng độ khó)
Theo mình thì nên dùng thời gian hay hơn dùng delay();
Cái nữa là khi có nhấn phím bạn nên gán key=getch(); rồi so sánh key với các ký tự có trên màn hình.
Với lại theo mình thì không nên sử dụng cleardevice(); sẽ gây giật hình, cái này bạn nên dùng màu nền để lấp thì hay hơn.
Để mình copy rồi xem thêm code của bạn, có gì trao đổi tiếp
Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.
theo lời anh DR em đa sửa bải của minh thanh như thế này. nhưng chữ rớt xuống còn bị giật hình.....
Em có đọc bài của anh NT_ONLYLOVE nhưng em chỉ hiểu là không duọc dùng cleardevice() để xóa màn hình. và thêm key=getch(); sau kbhit() để bắt ký tự truyền vào. còn thời gian hệ thống thì thực sư em không biết.
cho em hỏi là "dùng màu nền để lấp thì hay hơn - Nt_OnlyLove" thỉ phải làm sao + làm sao để cho nhiều hon 1 ký tự rớt xuống cùng lúc ?
cảm ơn các anh.
C++ Code:
#include <graphics.h> #include <stdlib.h> #include <conio.h> #include <dos.h> //------------------------------------------------------------ // Khai bao bien. char buffer[4096]; int diem,diemtam; int speed; int key; char kt; char taochu(); void drop(char &kt); void ket_thuc(); void main() { int gdriver= DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "E:\\BORLANDC\\BGI"); clrscr(); settextstyle(7,0,5); setcolor(9); diem=-1; diemtam=0; speed=20; do{ diem++; diemtam++; taochu(); drop(kt); if (diemtam==2&&speed!=1)//neu tang diemtam len //thi delay(speed) se tang it hon speed--; else diemtam=0; }while((key==kt)); ket_thuc(); } //-------------------------------------------------------------------------- //------------------cho chu rot void drop(char &kt) { int y=0; int x=random(620);//tao ngau nhien toa do x do { outtextxy(x,y,&kt); delay(speed); y++; if(y==480) ket_thuc(); cleardevice(); }while(!kbhit()); key=getch(); } //--------------------------------------------------------------------------- //---------------tao chu ngau nhien char taochu() { randomize(); int tam=random(6); if (tam==2) kt= random (9)+48; kt= random (25)+97; return kt; } // Ket thuc choi - Xuat ra ket qua. void ket_thuc() { closegraph(); gettext(10,10,70,15,buffer); gotoxy(20,12); textcolor(7); if(diem<=30) cprintf("Ban dat duoc <%d> diem. Ban choi chua hay !",diem); else if(diem<=90) cprintf("Ban dat duoc <%d> diem. Ban choi tam duoc !",diem); else cprintf("Ban dat duoc <%d> diem. Ban choi kha hay !",diem); getch(); }
Đã được chỉnh sửa lần cuối bởi iamvtn : 15-11-2007 lúc 09:12 AM.
xin lỗi mấy anh admin. em lại làm sai rồi
thay vì để trong code /code thi em lai them ca ngoặc vuông. ha ha