丢骰子的程序——初学者可以来看看(其实很有用的)
<P> 前天三个同学在寝室,突然想要喝酒。打算丢骰子喝的,可是两层楼找下来居然没有个骰子!郁闷之余,写了这个程序,暂时用了一下,后来改进了一写东西,在这里发出来,算是给初学者一个例子吧,挺简单的。就算不想看,也可以真的当骰子来用,绝对随机,不会作弊哟![em02]<BR><BR> 程序开始时提示输入骰子数量(最少一个,最多四个),回车后出现界面。只要按任意键不放,骰子就开始摇,放开后立即停止。如果要退出就按ESC。<BR><BR>代码如下:<BR><BR>#include "stdio.h"<BR>#include "graphics.h"<BR>#include "bios.h"<BR>#include "dos.h"<BR>#include "stdlib.h"</P><P>#define LENGTH 40<BR>#define ESC 0x11b<BR>#define TIME 2000</P>
<P>void Init(void);/*初始化绘图环境*/<BR>void drawdice(int x,int y,int number);/*画骰子*/</P>
<P>main()<BR>{<BR> int n=0;/*骰子的数量*/<BR> int number[4];/*每个骰子的点数*/<BR> int mx[4],my[4];/*各个骰子的中心坐标*/<BR> /*输入骰子的数量n,不能小于1或大于4*/<BR> while(n<=0 || n>4)<BR> {<BR> printf("\nEnter the number of dice(1-4):");<BR> scanf("%d",&n);<BR> }<BR> Init();/*初始化图形*/<BR> randomize();/*初始化随机数发生器*/<BR> switch(n)<BR> {<BR> case 1:<BR> {<BR> mx[0]=getmaxx()/2;/*获得屏幕中心坐标*/<BR> my[0]=getmaxy()/2;<BR> /*先在屏幕上显示一个骰子*/<BR> drawdice(mx[0],my[0],1);<BR> while(1)/*如果没有按键,则无限循环*/<BR> {<BR> if(!bioskey(1))/*如果有按键*/<BR> {<BR> if(bioskey(0)==ESC) exit(0);/*如果按键为ESC,退出*/<BR> }<BR> /*随机生成点数,由于random()函数生成的随机数包括0,所以此处要反复,直到生成的数不为0*/<BR> do{number[0]=random(7);}while(number[0]==0);<BR> drawdice(mx[0],my[0],number[0]);<BR> delay(TIME);/*延迟函数,使程序停顿一下,这样才能看清图形切换效果*/<BR> }<BR> break;<BR> }<BR> case 2:<BR> {<BR> /*骰子一的中心坐标*/<BR> mx[0]=getmaxx()/2-LENGTH;<BR> my[0]=getmaxy()/2;<BR> /*骰子二的中心坐标*/<BR> mx[1]=getmaxx()/2+LENGTH;<BR> my[1]=getmaxy()/2;<BR> /*先在屏幕上显示两个骰子*/<BR> drawdice(mx[0],my[0],1);<BR> drawdice(mx[1],my[1],1);<BR> while(1)<BR> {<BR> if(!bioskey(1))<BR> {<BR> if(bioskey(0)==ESC) exit(0);<BR> }<BR> /*随机生成两个点数*/<BR> do{number[0]=random(7);}while(number[0]==0);<BR> do{number[1]=random(7);}while(number[1]==0);<BR> /*画出骰子*/<BR> drawdice(mx[0],my[0],number[0]);<BR> drawdice(mx[1],my[1],number[1]);<BR> delay(TIME);<BR> }<BR> break;<BR> }<BR> case 3:<BR> {<BR> /*上方骰子的中心坐标*/<BR> mx[0]=getmaxx()/2;<BR> my[0]=getmaxy()/2-LENGTH;<BR> /*左下骰子的中心坐标*/<BR> mx[1]=getmaxx()/2-LENGTH;<BR> my[1]=getmaxy()/2+LENGTH;<BR> /*右下骰子的中心坐标*/<BR> mx[2]=getmaxx()/2+LENGTH;<BR> my[2]=getmaxy()/2+LENGTH;<BR> /*先在屏幕上显示三个骰子*/<BR> drawdice(mx[0],my[0],1);<BR> drawdice(mx[1],my[1],1);<BR> drawdice(mx[2],my[2],1);<BR> while(1)<BR> {<BR> if(!bioskey(1))<BR> {<BR> if(bioskey(0)==ESC) exit(0);<BR> }<BR> do{number[0]=random(7);}while(number[0]==0);<BR> do{number[1]=random(7);}while(number[1]==0);<BR> do{number[2]=random(7);}while(number[2]==0);<BR> drawdice(mx[0],my[0],number[0]);<BR> drawdice(mx[1],my[1],number[1]);<BR> drawdice(mx[2],my[2],number[2]);<BR> delay(TIME);<BR> }<BR> break;<BR> }<BR> case 4:<BR> {<BR> mx[0]=getmaxx()/2-LENGTH;/*左上*/<BR> my[0]=getmaxy()/2-LENGTH;<BR> mx[1]=getmaxx()/2+LENGTH;/*右上*/<BR> my[1]=getmaxy()/2-LENGTH;<BR> mx[2]=getmaxx()/2+LENGTH;/*右下*/<BR> my[2]=getmaxy()/2+LENGTH;<BR> mx[3]=getmaxx()/2-LENGTH;/*左下*/<BR> my[3]=getmaxy()/2+40;<BR> /*先在屏幕上显示四个骰子*/<BR> drawdice(mx[0],my[0],1);<BR> drawdice(mx[1],my[1],1);<BR> drawdice(mx[2],my[2],1);<BR> drawdice(mx[3],my[3],1);<BR> while(1)<BR> {<BR> if(!bioskey(1))<BR> {<BR> if(bioskey(0)==ESC) exit(0);<BR> }<BR> /*随机生成四个骰子的点数*/<BR> do{number[0]=random(7);}while(number[0]==0);<BR> do{number[1]=random(7);}while(number[1]==0);<BR> do{number[2]=random(7);}while(number[2]==0);<BR> do{number[3]=random(7);}while(number[3]==0);<BR> /*画出骰子*/<BR> drawdice(mx[0],my[0],number[0]);<BR> drawdice(mx[1],my[1],number[1]);<BR> drawdice(mx[2],my[2],number[2]);<BR> drawdice(mx[3],my[3],number[3]);<BR> delay(TIME);<BR> }<BR> break;<BR> }<BR> }<BR>}</P>
<P><BR>void Init(void)<BR>{<BR> int gd=DETECT,gm;<BR> initgraph(&gd,&gm,"");<BR> cleardevice();<BR>}</P>
<P>void drawdice(x,y,number)/*输入骰子中心坐标和点数,画出骰子*/<BR>{<BR> if(number<1 || number>6) {printf("\nError");exit(1);}/*检查随机生成的number是否超出范围*/<BR> setfillstyle(SOLID_FILL,WHITE);/*白色填充*/<BR> bar(x-(LENGTH/2),y-(LENGTH/2),x+(LENGTH/2),y+(LENGTH/2));/*画矩形*/<BR> switch(number)/*根据点数画红点*/<BR> {<BR> case 1:<BR> {<BR> setcolor(RED);<BR> setfillstyle(SOLID_FILL,RED);<BR> circle(x,y,LENGTH/4);/*画半径为10的圆*/<BR> floodfill(x,y,RED);/*填充圆*/<BR> break;<BR> }<BR> case 2:<BR> {<BR> setcolor(RED);<BR> setfillstyle(SOLID_FILL,RED);<BR> /*上*/<BR> circle(x,y-10,LENGTH/8);/*半径为5*/<BR> floodfill(x,y-10,RED);<BR> /*下*/<BR> circle(x,y+10,LENGTH/8);<BR> floodfill(x,y+10,RED);<BR> break;<BR> }<BR> case 3:<BR> { <BR> setcolor(RED);<BR> setfillstyle(SOLID_FILL,RED);<BR> /*中间*/<BR> circle(x,y,LENGTH/8);/*半径为5*/<BR> floodfill(x,y ,RED);<BR> /*右上*/<BR> circle(x+10,y-10,LENGTH/8);<BR> floodfill(x+10,y-10,RED);<BR> /*左下*/<BR> circle(x-10,y+10,LENGTH/8);<BR> floodfill(x-10,y+10,RED);<BR> break;<BR> }<BR> case 4:<BR> {<BR> setcolor(RED);<BR> setfillstyle(SOLID_FILL,RED);<BR> /*左上*/<BR> circle(x-10,y-10,LENGTH/8);/*半径为5*/<BR> floodfill(x-10,y-10,RED);<BR> /*右上*/<BR> circle(x+10,y-10,LENGTH/8);<BR> floodfill(x+10,y-10,RED);<BR> /*右下*/<BR> circle(x+10,y+10,LENGTH/8);<BR> floodfill(x+10,y+10,RED);<BR> /*左下*/<BR> circle(x-10,y+10,LENGTH/8);<BR> floodfill(x-10,y+10,RED);<BR> break;<BR> }<BR> case 5:<BR> {<BR> setcolor(RED);<BR> setfillstyle(SOLID_FILL,RED);<BR> /*中间*/<BR> circle(x,y,LENGTH/8);/*半径为5*/<BR> floodfill(x,y,RED);<BR> /*左上*/<BR> circle(x-10,y-10,LENGTH/8);<BR> floodfill(x-10,y-10,RED);<BR> /*右上*/<BR> circle(x+10,y-10,LENGTH/8);<BR> floodfill(x+10,y-10,RED);<BR> /*右下*/<BR> circle(x+10,y+10,LENGTH/8);<BR> floodfill(x+10,y+10,RED);<BR> /*左下*/<BR> circle(x-10,y+10,LENGTH/8);<BR> floodfill(x-10,y+10,RED);<BR> break;<BR> }<BR> case 6:<BR> {<BR> setcolor(RED);<BR> setfillstyle(SOLID_FILL,RED); <BR> /*左*/<BR> circle(x-10,y,LENGTH/10);/*半径为4*/<BR> floodfill(x-10,y,RED);<BR> /*左上*/<BR> circle(x-10,y-10,LENGTH/10);<BR> floodfill(x-10,y-10,RED);<BR> /*右上*/<BR> circle(x+10,y-10,LENGTH/10);<BR> floodfill(x+10,y-10,RED);<BR> /*右*/<BR> circle(x+10,y,LENGTH/10);<BR> floodfill(x+10,y,RED);<BR> /*右下*/<BR> circle(x+10,y+10,LENGTH/10);<BR> floodfill(x+10,y+10,RED);<BR> /*左下*/<BR> circle(x-10,y+10,LENGTH/10);<BR> floodfill(x-10,y+10,RED);<BR> break;<BR> }<BR> }<BR>}</P>
<p>只好重起电脑喽!<BR>[em06] [em17] [em02] 第一次可以停,第二次就挺不下了,是不是键盘缓存的问题???清一下试试看
页:
[1]
