- 浏览: 143491 次
- 性别:
- 来自: 福建 漳州
文章分类
最新评论
-
qq_25643251:
cjcandctr 写道我用javadoc时也是出错。发现确实 ...
javadoc生成文档时总是报java.lang.IllegalArgumentException错 -
cyf85235848:
很不专业嘛,最后 不是导出到 test.sql么 , 怎么是导 ...
mysql数据备份、恢复、SQL文件中导入 -
jjk_02027:
cell.setValue(a);
//a要是Double对象 ...
POI中使用HSSFDataFormat设置格式遇到的问题 -
bulktree:
大哥 你 好逗啊,那个控件没出现什么触发两次,这是很正常的,一 ...
JComboBox选项改变ItemStateChanged 触发两次 -
liuting:
好东西 初学者感谢楼主分享
UIManager可设置的各种属性
主要学习c在DOS下如何驱动鼠标.
#include<graphics.h> #include<stdio.h> #include<time.h> #include<dos.h> #define CARDCOLOR 5 #define XP 500 /*显示牌的地方,可通过该值来改变*/ #define YP 400 #define NUMBER 17 /*没人牌的个数*/ #define BKCOLOR 1 static int xnow=300,ynow=250,button=0;/*定义全局变量,保存鼠标信息*/ static cursoron[16][16],pattrib[16][16];/*定义全局变量,保存经过的各点信息*/ static int calbutton=0,outnumber=0; /*************************************** 定义54张牌 ****************************************/ struct card { int figure; int symbol; int flag[5]; }cards[54],outcards[17],player1[17],outcomputer[17]; /*************************************** 初始化54张牌 ****************************************/ void initcard() { register int i=0; for(i=0;i<52;i++) { cards[i].figure=(i+1)%13; cards[i].symbol=(i)/13 + 3; cards[i].flag[0]=0; cards[i].flag[1]=0; cards[i].flag[2]=0; } cards[52].figure=14; cards[53].figure=14; cards[52].symbol=1; cards[53].symbol=2; } /*************************************** 洗牌,利用发生器产生随机数,做250次对换 ****************************************/ void washcard() { register int i; struct card temp; int j=0,k=0; srand(time(NULL)); for(i=0;i<500;i++) { j=rand() % 54; k=rand() % 54; temp=cards[j]; cards[j]=cards[k]; cards[k]=temp; } } /************************************* 牌的框架 **************************************/ void box(int xposition,int yposition,int n) { int i=0; for(i=0;i<n;i++) { setcolor(CARDCOLOR); bar3d(xposition-25*i,yposition-100,xposition- 25*(i+1),yposition,1,1); } } /*************************************** 显示54张牌 ****************************************/ void showcard(struct card *p,int n,int x, int y) { int i=0,m; char buff[3]; m=n; box(x,y,m); for(i=0;i<n;i++,p++) { sprintf(buff,"%c%d",p->symbol,p->figure); outtextxy(x-22-25 * i,y-90,buff); sprintf(buff,"%d",p->flag[0]); outtextxy(x-22-25 * i,y-80,buff); sprintf(buff,"%d",p->flag[1]); outtextxy(x-22-25 * i,y-70,buff); sprintf(buff,"%d",p->flag[2]); outtextxy(x-22-25 * i,y-60,buff); } } /*********************************************** 对54张牌进行从小到大排列,并将没张牌的信息保存 ***********************************************/ void sortcard(struct card p[]) { register int i=0,j=0; int flag=0; struct card t; for(i=0; i< 17;i++) { flag=0; for(j=0;j<17-i-1;j++) { if(p[j].figure >= p[j+1].figure) { t=p[j]; p[j]=p[j+1]; p[j+1]=t; flag=1; } } if(flag==0) break; } for(i=17; i<33;i++) { flag=0; for(j=0;j<33-i-1;j++) { if(p[j].figure >= p[j+1].figure) { t=p[j]; p[j]=p[j+1]; p[j+1]=t; flag=1; } } if(flag==0) break; } for(i=34; i<50;i++) { flag=0; for(j=0;j<50-i-1;j++) { if(p[j].figure >= p[j+1].figure) { t=p[j]; p[j]=p[j+1]; p[j+1]=t; flag=1; } } if(flag==0) break; } } /*************************************** 将每张牌所能组成的一条龙张数表示出来 ****************************************/ int longer(struct card p[],int m,int number) /*返回第一张牌的最长接龙,m表示第M张牌,m表示总共的张数*/ { int mark=1,j=0; for(j=m;j<number;j++) { if((p[j].figure == p[j+1].figure-1) && (j+1)<number) mark=mark+1; else {if((p[j].figure == p[j+1].figure) && (j+1)<number) continue; else break; } } return mark; } /*************************************** 对牌进行扫描,将一组牌所能组成的 一条龙张数表示出来 ****************************************/ void inforcard(struct card p[],int num) { register int i=0; int len=0,j=0,tem=0; for(i=0;i< num;i++) { if( p[i].figure == p[i+1].figure && p[i+1].figure == p[i+2].figure && p[i+2].figure == p[i+3].figure && i+3<num) { p[i].flag[0]=4; p[i+1].flag[0]=4; p[i+2].flag[0]=4; p[i+3].flag[0]=4; i=i+3; } else if( p[i].figure == p[i+1].figure && p[i+1].figure == p[i+2].figure && i+2<num) { p[i].flag[0]=3; p[i+1].flag[0]=3; p[i+2].flag[0]=3; i=i+2; } else if( p[i].figure == p[i+1].figure && i+1<num) { p[i].flag[0]=2; p[i+1].flag[0]=2; i=i+1; } } for(i=0;i<num;i++) { tem=0; len=longer(cards,i,num); /*牌的长度*/ j=i; while(j<i+len) { p[i+tem].flag[1]=len; if(p[i+tem].figure!=p[i+tem+1].figure) j=j+1; tem++; } i=i+tem-1; /*i会再加1*/ } } /************************************* 初始为图形模式 **************************************/ initgraphs() { int gd=DETECT,gm=12; registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,"\\tc"); } /************************************* 将数组转换为而进制 **************************************/ void change(long q[]) { int i=0,j=0; for(i=0;i<16;i++) { for(j=0;j<16;j++) { cursoron[i][j]=q[i]%2; q[i]=q[i]/2; } } } /************************************* 鼠标的位图 **************************************/ void initcursor() { long oncursor[16]= { 0xC000,0xA000,0x9000,0x8800, 0x8400,0x8200,0x8100,0x8080, 0x8040,0x89E0,0x9100,0xA880, 0xC440,0x8220,0x01F0,0x0000 }; change(oncursor); } /***************************************** 用来画鼠标,并保存鼠标所在地方的点的信息 *****************************************/ void on_mouse(xnow,ynow) { int i=0,j=0; for(i=0;i<16;i++) for(j=0;j<16;j++) { pattrib[i][j]=getpixel(xnow+i,ynow+j); if(cursoron[i][j]==1) putpixel(xnow+i,ynow+j,10); } } /************************************* 将原来的鼠标隐藏,还原原来的点的值 **************************************/ void off_mouse(xnow,ynow) { int i=0,j=0; for(i=0;i<16;i++) for(j=0;j<16;j++) putpixel(xnow+i,ynow+j,pattrib[i][j]); } /************************************* 鼠标复位 **************************************/ char InitMs() { union REGS Inr, Outr; Inr.x.ax=0; int86(0x33,&Inr,&Outr); if(Outr.x.ax==0) return 0; else return 1; } /************************************* 判断鼠标是否移动 **************************************/ int movemouse() { int x0,y0,but0; union REGS rin; rin.x.ax=3; int86(0x33,&rin,&rin); x0=rin.x.cx; y0=rin.x.dx; but0=rin.x.bx; if(xnow!=x0 || ynow!=y0 || but0!=button) return 1; else return 0; } /************************************* 读取鼠标新的信息 **************************************/ int MouseRead() { union REGS rin; rin.x.ax=3; int86(0x33,&rin,&rin); button=rin.x.bx; xnow=rin.x.cx; ynow=rin.x.dx; return -1; } /*************************************** 函数用来清除原来的牌,并在新的位置显示 ******************************************/ void clear(int x,int y,int flag) /*FLAG为1时,牌向上突出*/ { int i=0,j=0; unsigned attrib[100][25]; if(flag==0) { for(i=0;i<100;i++) for(j=0;j<25;j++) { attrib[i][j]=getpixel(x+j,y-40+i); putpixel(x+j,y-40+i,BKCOLOR); } for(i=0;i<100;i++) for(j=0;j<25;j++) putpixel(x+j,y+i,attrib[i][j]); } else { for(i=0;i<100;i++) for(j=0;j<25;j++) { attrib[i][j]=getpixel(x+j,y+i); putpixel(x+j,y+i,BKCOLOR); } for(i=0;i<100;i++) for(j=0;j<25;j++) putpixel(x+j,y-40+i,attrib[i][j]); } } /*************************************** 函数用来清除原来的牌 ******************************************/ void card_cls(int x1,int y1,int x2,int y2) { int i=0,j=0; for(i=x1;i<=x2;i++) for(j=y1;j<=y2;j++) putpixel(i,j,BKCOLOR); } /*************************************** 函数用来初始化PLAYER1的牌 ******************************************/ void swplayer1() { int i=0; for(i=0;i<17;i++) player1[i]=cards[i]; } /*************************************** 函数用来让电脑出牌 ******************************************/ computer_out(int numb) { int i=0; switch(numb) { case 1: for(i=0;i<17;i++) { if(cards[17+i].flag[1]==1 && cards[17+i].figure > outcards[0].figure) { outcomputer[0] = cards[17+i]; showcard(outcomputer,1,20,YP-250); break; } } } } /*************************************** 函数用来更新PLAYER1的牌 ******************************************/ void reduplayer1() { int i=0,j=0; for(i=0;i<17;i++) { player1[i].flag[2]=0; if(player1[i].figure!=-1) player1[j++]=player1[i]; } } /*************************************** 函数用来出牌 ******************************************/ int outcard(int num) { int i=0,cflag=0; for(i=0;i<num;i++) { if(player1[i].flag[2]%2 == 1 && player1[i].figure!=-1) { outcards[cflag++] = player1[i]; player1[i].figure=-1; player1[i].flag[2]=0; } } switch (cflag) { case 1: card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,1,XP-50,YP-150); computer_out(1); break; case 2: if(outcards[0].figure== outcards[1].figure) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,2,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 3: if(outcards[0].figure== outcards[1].figure && outcards[1].figure== outcards[2].figure) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,3,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 4: if((outcards[0].figure== outcards[1].figure && outcards[1].figure== outcards[2].figure) || (outcards[1].figure== outcards[2].figure && outcards[2].figure== outcards[3].figure ) || (outcards[0].figure== outcards[1].figure && outcards[1].figure== outcards[2].figure && outcards[2].figure== outcards[3].figure)) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,4,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 5: if(outcards[0].figure== outcards[1].figure-1 && outcards[1].figure== outcards[2].figure-1 && outcards[2].figure== outcards[3].figure-1 && outcards[3].figure== outcards[4].figure-1 ) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,5,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 6: if((outcards[0].figure== outcards[1].figure-1 && outcards[1].figure== outcards[2].figure-1 && outcards[2].figure== outcards[3].figure-1 && outcards[3].figure== outcards[4].figure-1 && outcards[4].figure== outcards[5].figure-1) || (outcards[0].figure== outcards[1].figure && outcards[2].figure== outcards[3].figure && outcards[4].figure== outcards[5].figure)) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,6,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 7: if(outcards[0].figure== outcards[1].figure-1 && outcards[1].figure== outcards[2].figure-1 && outcards[2].figure== outcards[3].figure-1 && outcards[3].figure== outcards[4].figure-1 && outcards[4].figure== outcards[5].figure-1 && outcards[5].figure== outcards[6].figure-1 ) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,7,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 8: if(( outcards[0].figure== outcards[1].figure-1 && outcards[1].figure== outcards[2].figure-1 && outcards[2].figure== outcards[3].figure-1 && outcards[3].figure== outcards[4].figure-1 && outcards[4].figure== outcards[5].figure-1 && outcards[5].figure== outcards[6].figure-1 && outcards[6].figure== outcards[7].figure-1)|| (outcards[0].figure== outcards[1].figure && outcards[2].figure== outcards[3].figure && outcards[4].figure== outcards[5].figure && outcards[6].figure== outcards[7].figure ) ) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,8,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} case 9: if (outcards[0].figure== outcards[1].figure-1 && outcards[1].figure== outcards[2].figure-1 && outcards[2].figure== outcards[3].figure-1 && outcards[3].figure== outcards[4].figure-1 && outcards[4].figure== outcards[5].figure-1 && outcards[5].figure== outcards[6].figure-1 && outcards[6].figure== outcards[7].figure-1 && outcards[7].figure== outcards[8].figure-1 ) { card_cls(XP-400,YP-250,XP-50,YP-150); showcard(outcards,9,XP-50,YP-150); break; } else { outtextxy(100,100,"error");break;} } reduplayer1(); card_cls(XP-425,YP-150,XP,YP); outnumber=outnumber+cflag; showcard(player1,17-outnumber,XP,YP); return cflag; } /************************************************ 处理左右键的点击 ***********************************************/ void dealclick() { char buff[10]; int x=0,k=0,tem=XP - 25*NUMBER; if(getpixel(xnow,ynow) !=BKCOLOR && (button==1 || button==2)) { off_mouse(xnow,ynow); x=(xnow-tem)/25*25+tem; k=16-(xnow-tem)/25; if(button==1) { player1[k].flag[2]=player1[k].flag[2]+1; clear(x,YP-100,player1[k].flag[2]%2); } else if(button==2) { outcard(17-outnumber); } on_mouse(xnow,ynow); } } main() { initgraphs(); setbkcolor(BKCOLOR); initcard(); washcard(); sortcard(cards); inforcard(cards,17); showcard(cards,17,XP,YP); InitMs(); initcursor(); swplayer1(); on_mouse(xnow,ynow); do{ if(movemouse()) { off_mouse(xnow,ynow); MouseRead(); printf("\r%4d %4d %4d",xnow,ynow,button); on_mouse(xnow,ynow); } dealclick(); }while(!kbhit()); }
- card.rar (28.6 KB)
- 描述: 代码
- 下载次数: 1
相关推荐
虽然C语言本身不支持图形用户界面(GUI),但开发者可能会借助如ncurses库来创建控制台式的文本界面,通过字符模拟出扑克牌的显示,以及接收用户的键盘输入来控制游戏流程。 总的来说,《基于C语言的扑克牌小游戏》...
【标题】中的“一个简易的用C语言编写的蜘蛛纸牌小游戏”表明我们要讨论的是一个使用C语言开发的蜘蛛纸牌游戏。...它是一个理想的项目,可以帮助开发者巩固C语言基础,学习游戏逻辑,以及如何创建用户友好的交互体验。
通过分析这款21点扑克牌游戏的C#源码,开发者不仅可以学习到C#编程语言的实际运用,还能深入理解游戏逻辑的实现,同时提升在UI设计、数据结构和算法、错误处理等方面的能力。对于初学者来说,这是一个很好的实践项目...
斗地主是一种流行的扑克牌游戏,通常由三位玩家参与,玩家通过出牌策略进行竞争。在C语言中实现斗地主游戏,需要考虑以下几个核心知识点: 1. 数据结构:首先,你需要定义一种数据结构来存储和管理牌。这可能包括...
在编程领域,实现一个纸牌游戏的洗牌和发牌功能是常见的练习,它涉及到随机数生成、数组操作以及逻辑思维。在这个项目中,我们使用C语言来完成这个任务。C语言是一种强大的、低级别的编程语言,适合进行系统级编程和...
- 游戏布局:学习如何用C语言表示游戏桌面上的牌堆、储备区、基础列等元素。 - 牌的移动规则:编程实现合法的牌移动,包括从储备区到桌面、牌堆之间的转移等。 4. **算法实现**: - 排序算法:可能涉及快速排序...
一款C语言实现的扑克牌小游戏,用到了随机函数,初学者可以看一下,方便日后学习。游戏规则: 游戏开始时,向所有参与者(庄家和闲家)分发两张扑克牌。玩家可以看到他们的牌以及点数总和。然而,庄家有一张牌暂时不...
在这个名为“用C语言实现的扑克游戏简单实用(C++)”的项目中,开发者采用C++编程语言创建了一个基础的扑克游戏。虽然这个程序可能最初是作为课堂作业设计的,但它提供了一个学习和扩展的基础,让学生和爱好者们...
首先,24点游戏是一种智力游戏,玩家需要从四张随机给出的扑克牌(数值为1到13)中,通过加减乘除运算,使得运算结果等于24。在C语言中实现这个游戏,我们需要设计算法来检查所有可能的组合,并判断是否能得出24。 ...
梭哈游戏是一种流行扑克牌游戏,通过C语言实现,我们可以深入理解C语言的内存管理、数据结构、逻辑控制以及函数调用等核心概念。 【描述】中的关键点在于"结构体"、"枚举"和"共用体"的使用,这些都是C语言中非常...
游戏开始时,每名玩家随机抽取一张牌作为起始牌,然后按照特定的出牌顺序进行。C语言中的随机数生成函数`rand()`和种子设置函数`srand()`可以用来实现这一功能。 在拱猪游戏中,程序需要处理以下几个关键部分: 1....
《标准C写的21点游戏》 在编程学习过程中,编写简单的游戏程序是常见的实践方式,可以帮助初学者更好地理解和运用编程语言。本文将详细介绍一款使用标准C语言编写的21点游戏,它允许最多五位玩家参与,让我们一同...
本项目是一个基于C#编程语言实现的塔罗牌游戏,主要用于学习和实践C#的编程技巧,特别是在使用枚举(Enum)类型方面。塔罗牌游戏通常涉及到随机性、数据结构以及面向对象的设计原则,这些都是C#编程中的重要概念。...
此外,由于斗地主游戏涉及到随机性(发牌、出牌顺序),因此还需要熟悉C语言中的随机数生成函数,如`srand()`和`rand()`。游戏的核心逻辑包括: 1. **数据结构设计**:为了存储牌型和玩家的手牌,需要设计合适的...
《C语言实现简易扑克牌游戏》 在编程领域,实现各种游戏可以帮助我们更好地理解数据结构和算法的应用。本文将详细探讨如何使用C语言编写一个简单的扑克牌游戏。这个游戏的规则如下:一副扑克牌平均分为两份,两位...
一个基于C语言实现的简单跑得快扑克牌游戏。通过这个项目,我们不仅能够体验到游戏开发的乐趣,还能深入理解数据结构、算法和图形编程的基本概念。我们将逐步解析代码的各个部分,探讨其功能和实现细节,帮助读者...
3. 对局规则:开局时两名玩家各取一张牌,然后判断是否要牌,玩家不要牌后本局游戏不可再要牌,两名玩家都不要牌或者有玩家手牌爆了则结束本局(每位玩家一局最多拿五张牌),有玩家爆了则没爆的玩家获胜,若两名...