如何用C语言制作24点游戏程序?

/*6.3.4源程序*/

#定义N 20

#定义COL 100

#定义第40行

#包含“stdio.h”

#include "time.h" /*系统时间函数*/

#include "graphics.h" /*图形功能*/

#include "alloc.h"/*动态地址分配函数*/

#include "stdlib.h" /*库函数*/

#include "string.h" /*字符串函数*/

#include "ctype.h" /*字符操作函数*/

char p[4][13]={

{'a ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' 0 ',' j ',' q ',' k'},/*扑克,10。

{'A ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' 0 ',' J ',' Q ',' K'},

{'A ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' 0 ',' J ',' Q ',' K'},

{'A ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' 0 ',' J ',' Q ',' K ' } }

typedef结构节点

{

int数据;

结构节点*链接;

} stack 1;/*堆栈1*/

typedef结构节点2

{

char数据;

struct node2 * link

} STACK2/*堆栈2*/

void init(void);/*图形驱动程序*/

void close(无效);/*图形关闭*/

void play(无效);/*许可的具体流程*/

void rand 1(int j);/*随机交易功能*/

void change(char *e,char * a);/*中缀后缀函数*/

int计算机(char * s);/*后缀表达式计算函数*/

stack 1 * init stack 1(stack 1 * top);/*堆栈1的初始化*/

stack 1 * push(stack 1 * top,int x);/*堆栈1堆栈操作*/

stack 1 * pop(stack 1 * top);/* Stack 1删除栈顶元素*/

int topx(stack 1 * top);/* Stack 1读取堆栈的顶部元素*/

stack 1 * ptop(stack 1 * top,int * x);/* Stack 1读取堆栈顶部元素的值,并删除堆栈顶部元素*/

int empty(stack 1 * top);/*判断堆栈1是否为空函数*/

stack 2 * init stack 2(stack 2 * top);/*堆栈2初始化*/

STACK2 *push2(STACK2 *top,char x);/*堆叠2堆叠操作*/

stack 2 * pop 2(stack 2 * top);/* Stack 2删除堆栈的顶部元素*/

char top x2(stack 2 * top);/*堆栈2读取堆栈的顶部元素*/

STACK2 *ptop2(STACK2 *top,char * x);/* Stack 2读取顶部元素的值并删除顶部元素*/

int empty 2(stack 2 * top);/*判断栈2是否为空函数*

int text 1(char * s);/*显示文本*/

主()

{

char s[N],s1[N],ch;

int i,result

int gdriver,gmode

clr SCR();/*清空屏幕*/

init();/*初始化函数*/

while(1)

{

setbkcolor(黑色);/*设置背景颜色*/

clear device();/*清空屏幕*/

play();/*许可*/

gotoxy(1,15);/*移动光标*/

printf("-Note-\ n ");

printf("请根据以上四个数字输入快递\ n ");/*提示信息*/

printf("格式如下:2。*(5.+7.)\ n”);/*提示字符串格式*/

printf("-\ n ");

scanf("%s%c ",s1,& ampch);/*输入字符串并按Enter */

change(s1,s);/*调用change函数将中缀表达式s1转换为后缀表达式s*/

结果=计算机;/*计算后缀表达式的值并返回结果*/

If(result==24) /*如果结果等于24*/

text1("很好");/*调用函数text1显示字符串“非常好”*/

其他

text1("错!!!");/*否则,函数text1显示字符串“错误!!!"*/

printf("继续(y/n)?\ n ");/*提示信息,是否要继续*/

scanf("%c ",& ampch);/*输入一个字符*/

If(ch=='n'||ch=='N') /*如果字符等于N或N*/

打破;/*跳出循环,程序结束*/

}/*否则,开始下一个循环*/

close();

返回;/* Return */

}

Void rand1(int j)/*随机发牌函数*/

{

int kind,num

char str[3],n;

randomize();

While(1)/*循环直到发牌*/

{

kind = random(4);/*颜色随机数*/

num = random(13);/*大小随机数*/

if(p[kind][num]!=-1) /*这个号码没人取*/

{

n = p[种类][数量];/*取相应位置的扑克牌数量*/

p[kind][num]=-1;/*发牌后,相应位置的元素设置为-1*/

打破;

}

}

Switch(kind)/*花式判断*/

{

案例0:setcolor(红色);sprintf(str," %c ",3);打破;/*红心*/

案例1:setcolor(黑色);sprintf(str," %c ",3);打破;/*黑桃*/

案例二:setcolor(红色);sprintf(str," %c ",4);打破;/*正方形*/

案例三:setcolor(黑色);sprintf(str," %c ",5);打破;/*草花*/

}

settextstyle(0,0,2);

outtextxy(COL+j*100-30,ROW+100-46,str);/*在左上角显示颜色*/

out textxy(COL+j * 100+16,ROW+100+32,str);/*在右下角显示颜色*/

如果(n!='0')/*输出其他卡片*/

{

settextstyle(0,0,3);

sprintf(str," %c ",n);

outtextxy(COL+j*100-5,ROW+100-5,str);/*显示卡片的大小*/

}

Else/*输出10时*/

{

sprintf(str," %d ",10);

outtextxy(COL+j*100-6,ROW+100-5,str);

}

}

Void play(void)/*发牌的具体流程*/

{

int j;

for(j = 0;j & lt4;j++)

{

bar(COL+j*100-35,ROW+100-50,COL+j*100+35,ROW+1 * 100+50);/*抽空牌*/

setcolor(蓝色);

矩形(COL+j*100-32,ROW+100-48,COL+j*100+32,ROW+100+48);/*画一个矩形框*/

rand 1(j);/*随机选卡*/

延时(10000);/*延迟显示*/

}

}

Void init(void)/*图形驱动程序*/

{

int gd=DETECT,GM;

init graph(& amp;gd,& ampgm," c:\ \ TC ");

clear device();

}

Void close(void)/*图形关闭*/

{

closegraph();

}

Void change(char *e,char *a) /*中缀字符串E到后缀字符串A函数*/

{

STACK2 * top = NULL/*定义栈顶指针*/

int i,j;char w;

I = 0;

j = 0;

while(e[i]!='\0') /*当字符串没有结束*/

{

If(is digit(e[I])/*如果字符是数字*/

{

做{

a[j]= e[I];/*按原样将数字复制到数组A中*/

i++;下标到/*e数组加1*/

j++;/*数组的下标加上1*/

}while(e[i]!='.');/*直到字符是数字终止符。“*/

a[j]= ' . ';j++;/*复制数字终止符。“添加到A数组中,并且仍然保留结束标记*/

}

If (e [I] =' (')/*如果字符是"(" */

top=push2(top,e[I]);/*将其压入堆栈*/

If (e [I] =')')/*如果字符是")" */

{

top = ptop 2(top & amp;w);/*取出栈顶元素,从栈顶删除*/

而(w!=' (')/*如果字符不是'(' */

{

a[j]= w;/*在数组A中存储堆栈顶部的元素*/

j++;/*下标加1*/

top = ptop 2(top & amp;w);/*取出栈顶元素,从栈顶删除*/

}

}

If (e [I] ='+'|| e [I] ='-')/*如果字符是加号或减号*/

{

如果(!Empty2(top)) /*如果堆栈不为空*/

{

w=topx2(顶);

而(w!=' (')/*当栈顶元素不是'(' */

{

a[j]= w;

j++;/*将栈顶元素存储在表达式A中,加1*/

top = pop 2(top);/*删除栈顶元素*/

If(empty2(top)) /*如果堆栈为空*/

打破;/*跳出循环*/

其他

w=topx2(顶);/*否则读取堆栈的顶部元素*/

}

}

top=push2(top,e[I]);/*将当前e的字符元素压入堆栈*/

}

If (e [I] =' *' || e [I] ='/')/*如果字符是乘法或除法符号*/

{

如果(!Empty2(top)) /*如果堆栈不为空*/

{

w=topx2(顶);/*读取栈顶元素并将其存储在w中*/

当栈顶元素为乘法或除法时,While(w=='*'||w=='/')/*循环重复

{

a[j]= w;

j++;/*将栈顶元素存储在字符串A中,加1*/

top = pop 2(top);/*删除栈顶元素*/

If(empty2(top)) /*如果堆栈为空*/

打破;/*跳出循环*/

其他

w=topx2(顶);/*否则读取堆栈的顶部元素*/

}

}

top=push2(top,e[I]);/*将当前E字符元素压入堆栈*/

}

i++;下标到/*e加1*/

}

而(!Empty2(顶部))/*不为空时重复*/

top = ptop 2(top & amp;a[j++]);/*在数组A中存储栈顶元素*/

a[j]= ' \ 0 ';/*将字符串结束标记写入最后一个数组元素,形成一个字符串*/

}

Int computer(char *s) /*计算函数*/

{

stack 1 * top = NULL;

int i,k,num1,num2,result

I = 0;

while(s[i]!='\0') /*当字符串没有结束时,执行下列操作*/

{

if(is digit(s[I])/*判断字符是否为数字*/

{

k = 0;/* k的初始值是0*/

做{

k = 10 * k+s[I]--0;/*将字符连接成十进制数字*/

i++;/*i加1*/

}while(s[i]!='.');/*当字符不是“.”时重复循环*/

top=push(top,k);/*将生成的数字压入堆栈*/

}

If (s [I] ='+')/*如果是'+'*/

{

top = ptop(top & amp;num 2);/*取出栈顶元素,存放在num2 */

top = ptop(top & amp;num 1);/*取出栈顶元素,存入num1 */

结果= num 2+num 1;/*将num1和num2相加并存储在结果中*/

top=push(top,result);/*将结果压入堆栈*/

}

If (s [I] ='-')/*如果是'-'*/

{

top = ptop(top & amp;num 2);/*取出栈顶元素,存放在num2 */

top = ptop(top & amp;num 1);/*取出栈顶元素,存入num1 */

result = num 1-num 2;/*将num1减去num2的结果存储在Result */

top=push(top,result);/*将结果压入堆栈*/

}

If (s [I] =' *')/*如果是' *' */

{

top = ptop(top & amp;num 2);/*取出栈顶元素,存放在num2 */

top = ptop(top & amp;num 1);/*取出栈顶元素,存入num1 */

result = num 1 * num 2;/*将num1与num2的乘法结果存储在result */

top=push(top,result);/*将结果压入堆栈*/

}

If (s [I] ='/')/*如果是'/'*/

{

top = ptop(top & amp;num 2);/*取出栈顶元素,存放在num2 */

top = ptop(top & amp;num 1);/*取出栈顶元素,存入num1 */

result = num 1/num 2;/*将num1除以num2的结果存储在Result *中

top=push(top,result);/*将结果压入堆栈*/

}

i++;/*i加1*/

}

top = ptop(top & amp;结果);/*堆栈顶部最后一个元素的值是计算结果*/

返回结果;/*返回结果*/

}

Stack1 *初始化stack 1(stack 1 * top)/*初始化*/

{

top = NULL/*堆栈顶部指针设置为空*/

返回顶部;/*返回栈顶指针*/

}

stack 1 * push(stack 1 * top,int x)/*堆栈入口函数*/

{

stack 1 * p;/*临时指针类型是STACK1*/

p =(stack 1 *)malloc(sizeof(stack 1));/*申请STACK1大小的空间*/

If(p==NULL) /*如果p为空*/

{

printf("内存溢出\n!!");/*显示内存溢出*/

退出(0);/*退出*/

}

p->;数据= x;/*将值x保存到新空间*/

p->;link = top/*新节点的后继节点是当前栈顶指针*/

top = p;/*新的栈顶指针是新插入的节点*/

返回顶部;/*返回栈顶指针*/

}

栈1 * pop(栈1 * top)/*离栈*/

{

stack 1 * q;/*定义临时变量*/

q = top/*保存当前栈顶指针*/

top = top-& gt;链接;/*堆栈顶部的指针向后移动*/

免费(q);/*发布q*/

返回顶部;/*返回栈顶指针*/

}

Int topx(STACK1 *top) /*读取堆栈的顶部元素*/

{

If(top==NULL) /*堆栈是否为空*/

{

printf("Stack为null \ n ");/*显示堆栈为空的信息*/

返回0;/*返回整数0*/

}

返回顶部-& gt;数据;/*返回堆栈的顶部元素*/

}

Stack 1 * ptop(Stack 1 * top,int * x)/*获取栈顶元素并删除*/

{

* x = topx(top);/*读取栈顶元素*/

top=pop(顶);/*删除栈顶元素*/

返回顶部;/*返回栈顶指针*/

}

Int empty(STACK1 *top) /*判断堆栈是否为空*/

{

If(top==NULL) /* If empty */

返回1;/*返回1*/

其他

返回0;/*否则,0*/

}

Stack2 *初始化stack2 (stack2 * top)/*初始化*/

{

top = NULL/*堆栈顶部指针设置为空*/

返回顶部;/*返回栈顶指针*/

}

Stack 2 * push 2 (Stack 2 * top,char x)/* Stack函数*/

{

stack 2 * p;/*临时指针类型是STACK2*/

p =(stack 2 *)malloc(sizeof(stack 2));/*申请堆栈大小的空间2 */

If(p==NULL) /*如果p为空*/

{

printf("内存溢出\n!!");/*显示内存溢出*/

退出(0);/*退出*/

}

p->;数据= x;/*将值x保存到新空间*/

p->;link = top/*新节点的后继节点是当前栈顶指针*/

top = p;/*新的栈顶指针是新插入的节点*/

返回顶部;/*返回栈顶指针*/

}

STACK2 *pop2(STACK2 *top) /*超出堆栈*/

{

stack 2 * q;/*定义临时变量*/

q = top/*保存当前栈顶指针*/

top = top-& gt;链接;/*堆栈顶部的指针向后移动*/

免费(q);/*发布q*/

返回顶部;/*返回栈顶指针*/

}

Char topx2(STACK2 *top) /*读取栈顶元素*/

{

If(top==NULL) /*堆栈是否为空*/

{

printf("Stack为null \ n ");/*显示堆栈为空的信息*/

返回“”;/*返回空字符*/

}

返回顶部-& gt;数据;/*返回堆栈的顶部元素*/

}

Stack2 * ptop2 (stack2 * top,char * x)/*取栈顶元素并删除它*/

{

* x = top x2(top);/*读取栈顶元素*/

top = pop 2(top);/*删除栈顶元素*/

返回顶部;/*返回栈顶指针*/

}

Int empty2(STACK2 *top) /*判断堆栈是否为空*/

{

If(top==NULL) /* If empty */

返回1;/*返回1*/

其他

返回0;/*否则,0*/

}

int text1(字符)

{

setbkcolor(蓝色);/*将背景颜色设置为蓝色*/

clear device();/*清空屏幕*/

set color(12);/*将文本颜色设置为浅红色*/

settextstyle(1,0,8);/*三笔画字体,放大8倍*/

outtextxy(120,120,s);/*输出字符串s*/

setusercharsize(2,1,4,1);/*水平放大2倍,垂直放大4倍*/

set color(15);/*将文本颜色设置为*白色/

settextstyle(3,0,5);/*无行间笔画,放大5倍*/

outtextxy(220,220,s);/*输出字符串s*/

getch();/*在键盘上输入任意字符*/

返回;/* Return */

}