标题:丢骰子的程序——初学者可以来看看(其实很有用的)
只看楼主
wjse
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-8-24
 问题点数:0 回复次数:7 
丢骰子的程序——初学者可以来看看(其实很有用的)

前天三个同学在寝室,突然想要喝酒。打算丢骰子喝的,可是两层楼找下来居然没有个骰子!郁闷之余,写了这个程序,暂时用了一下,后来改进了一写东西,在这里发出来,算是给初学者一个例子吧,挺简单的。就算不想看,也可以真的当骰子来用,绝对随机,不会作弊哟!

程序开始时提示输入骰子数量(最少一个,最多四个),回车后出现界面。只要按任意键不放,骰子就开始摇,放开后立即停止。如果要退出就按ESC。

代码如下:

#include "stdio.h"
#include "graphics.h"
#include "bios.h"
#include "dos.h"
#include "stdlib.h"

#define LENGTH 40
#define ESC 0x11b
#define TIME 2000

void Init(void);/*初始化绘图环境*/
void drawdice(int x,int y,int number);/*画骰子*/

main()
{
int n=0;/*骰子的数量*/
int number[4];/*每个骰子的点数*/
int mx[4],my[4];/*各个骰子的中心坐标*/
/*输入骰子的数量n,不能小于1或大于4*/
while(n<=0 || n>4)
{
printf("\nEnter the number of dice(1-4):");
scanf("%d",&n);
}
Init();/*初始化图形*/
randomize();/*初始化随机数发生器*/
switch(n)
{
case 1:
{
mx[0]=getmaxx()/2;/*获得屏幕中心坐标*/
my[0]=getmaxy()/2;
/*先在屏幕上显示一个骰子*/
drawdice(mx[0],my[0],1);
while(1)/*如果没有按键,则无限循环*/
{
if(!bioskey(1))/*如果有按键*/
{
if(bioskey(0)==ESC) exit(0);/*如果按键为ESC,退出*/
}
/*随机生成点数,由于random()函数生成的随机数包括0,所以此处要反复,直到生成的数不为0*/
do{number[0]=random(7);}while(number[0]==0);
drawdice(mx[0],my[0],number[0]);
delay(TIME);/*延迟函数,使程序停顿一下,这样才能看清图形切换效果*/
}
break;
}
case 2:
{
/*骰子一的中心坐标*/
mx[0]=getmaxx()/2-LENGTH;
my[0]=getmaxy()/2;
/*骰子二的中心坐标*/
mx[1]=getmaxx()/2+LENGTH;
my[1]=getmaxy()/2;
/*先在屏幕上显示两个骰子*/
drawdice(mx[0],my[0],1);
drawdice(mx[1],my[1],1);
while(1)
{
if(!bioskey(1))
{
if(bioskey(0)==ESC) exit(0);
}
/*随机生成两个点数*/
do{number[0]=random(7);}while(number[0]==0);
do{number[1]=random(7);}while(number[1]==0);
/*画出骰子*/
drawdice(mx[0],my[0],number[0]);
drawdice(mx[1],my[1],number[1]);
delay(TIME);
}
break;
}
case 3:
{
/*上方骰子的中心坐标*/
mx[0]=getmaxx()/2;
my[0]=getmaxy()/2-LENGTH;
/*左下骰子的中心坐标*/
mx[1]=getmaxx()/2-LENGTH;
my[1]=getmaxy()/2+LENGTH;
/*右下骰子的中心坐标*/
mx[2]=getmaxx()/2+LENGTH;
my[2]=getmaxy()/2+LENGTH;
/*先在屏幕上显示三个骰子*/
drawdice(mx[0],my[0],1);
drawdice(mx[1],my[1],1);
drawdice(mx[2],my[2],1);
while(1)
{
if(!bioskey(1))
{
if(bioskey(0)==ESC) exit(0);
}
do{number[0]=random(7);}while(number[0]==0);
do{number[1]=random(7);}while(number[1]==0);
do{number[2]=random(7);}while(number[2]==0);
drawdice(mx[0],my[0],number[0]);
drawdice(mx[1],my[1],number[1]);
drawdice(mx[2],my[2],number[2]);
delay(TIME);
}
break;
}
case 4:
{
mx[0]=getmaxx()/2-LENGTH;/*左上*/
my[0]=getmaxy()/2-LENGTH;
mx[1]=getmaxx()/2+LENGTH;/*右上*/
my[1]=getmaxy()/2-LENGTH;
mx[2]=getmaxx()/2+LENGTH;/*右下*/
my[2]=getmaxy()/2+LENGTH;
mx[3]=getmaxx()/2-LENGTH;/*左下*/
my[3]=getmaxy()/2+40;
/*先在屏幕上显示四个骰子*/
drawdice(mx[0],my[0],1);
drawdice(mx[1],my[1],1);
drawdice(mx[2],my[2],1);
drawdice(mx[3],my[3],1);
while(1)
{
if(!bioskey(1))
{
if(bioskey(0)==ESC) exit(0);
}
/*随机生成四个骰子的点数*/
do{number[0]=random(7);}while(number[0]==0);
do{number[1]=random(7);}while(number[1]==0);
do{number[2]=random(7);}while(number[2]==0);
do{number[3]=random(7);}while(number[3]==0);
/*画出骰子*/
drawdice(mx[0],my[0],number[0]);
drawdice(mx[1],my[1],number[1]);
drawdice(mx[2],my[2],number[2]);
drawdice(mx[3],my[3],number[3]);
delay(TIME);
}
break;
}
}
}


void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
cleardevice();
}

void drawdice(x,y,number)/*输入骰子中心坐标和点数,画出骰子*/
{
if(number<1 || number>6) {printf("\nError");exit(1);}/*检查随机生成的number是否超出范围*/
setfillstyle(SOLID_FILL,WHITE);/*白色填充*/
bar(x-(LENGTH/2),y-(LENGTH/2),x+(LENGTH/2),y+(LENGTH/2));/*画矩形*/
switch(number)/*根据点数画红点*/
{
case 1:
{
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
circle(x,y,LENGTH/4);/*画半径为10的圆*/
floodfill(x,y,RED);/*填充圆*/
break;
}
case 2:
{
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
/*上*/
circle(x,y-10,LENGTH/8);/*半径为5*/
floodfill(x,y-10,RED);
/*下*/
circle(x,y+10,LENGTH/8);
floodfill(x,y+10,RED);
break;
}
case 3:
{
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
/*中间*/
circle(x,y,LENGTH/8);/*半径为5*/
floodfill(x,y ,RED);
/*右上*/
circle(x+10,y-10,LENGTH/8);
floodfill(x+10,y-10,RED);
/*左下*/
circle(x-10,y+10,LENGTH/8);
floodfill(x-10,y+10,RED);
break;
}
case 4:
{
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
/*左上*/
circle(x-10,y-10,LENGTH/8);/*半径为5*/
floodfill(x-10,y-10,RED);
/*右上*/
circle(x+10,y-10,LENGTH/8);
floodfill(x+10,y-10,RED);
/*右下*/
circle(x+10,y+10,LENGTH/8);
floodfill(x+10,y+10,RED);
/*左下*/
circle(x-10,y+10,LENGTH/8);
floodfill(x-10,y+10,RED);
break;
}
case 5:
{
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
/*中间*/
circle(x,y,LENGTH/8);/*半径为5*/
floodfill(x,y,RED);
/*左上*/
circle(x-10,y-10,LENGTH/8);
floodfill(x-10,y-10,RED);
/*右上*/
circle(x+10,y-10,LENGTH/8);
floodfill(x+10,y-10,RED);
/*右下*/
circle(x+10,y+10,LENGTH/8);
floodfill(x+10,y+10,RED);
/*左下*/
circle(x-10,y+10,LENGTH/8);
floodfill(x-10,y+10,RED);
break;
}
case 6:
{
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
/*左*/
circle(x-10,y,LENGTH/10);/*半径为4*/
floodfill(x-10,y,RED);
/*左上*/
circle(x-10,y-10,LENGTH/10);
floodfill(x-10,y-10,RED);
/*右上*/
circle(x+10,y-10,LENGTH/10);
floodfill(x+10,y-10,RED);
/*右*/
circle(x+10,y,LENGTH/10);
floodfill(x+10,y,RED);
/*右下*/
circle(x+10,y+10,LENGTH/10);
floodfill(x+10,y+10,RED);
/*左下*/
circle(x-10,y+10,LENGTH/10);
floodfill(x-10,y+10,RED);
break;
}
}
}

搜索更多相关主题的帖子: 骰子 作弊 
2007-03-21 23:48
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
得分:0 
挺有意思
但是感觉还能优化
2007-03-22 00:21
wangjianguo
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-4-6
得分:0 

不能运行啊 ,老大

2007-04-07 12:13
hjj1123
Rank: 1
等 级:新手上路
帖 子:198
专家分:0
注 册:2006-7-29
得分:0 
绝对随机?你的随机数是依靠“do{number[0]=random(7);}while(number[0]==0);“这句话中的函数random()生成的 它是个伪随机函数,算法网上可以找到。我还以为你自己写了随机数生成算法。不过你 的程序挺有 创意的。

qq:674940174
2007-04-13 09:04
hahahan
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-4-10
得分:0 
win-tc下运行正常
不错不错 色子可以动起来 就是停不了啊 呵呵

没事儿你就多到这儿转转
2007-04-13 23:39
沉默改良者
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-4-15
得分:0 
2007-04-15 03:22
玖莉
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-4-14
得分:0 
以下是引用hahahan在2007-4-13 23:39:52的发言:
win-tc下运行正常
不错不错 色子可以动起来 就是停不了啊 呵呵

只好重起电脑喽!


编程初学者
2007-04-21 17:05
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
得分:0 
第一次可以停,第二次就挺不下了,是不是键盘缓存的问题???清一下试试看

简单的快乐着~
2007-05-03 19:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-125764-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.365799 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved