大一c语言设计小游戏(c语言课程设计)
很多朋友对于大一c语言设计小游戏和c语言课程设计不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
如何用c语言编写一个小游戏
一、数学知识:
长方形的面积S=a*b
长方形周长L=2*(a+b)
其中a b分别为长方形的宽和高。
二、算法分析:
长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。
三、参考代码:
#include<stdio.h>
voidmain()
{
doublea,b;
doubleL,S;
scanf("%lf%lf",&a,&b);//输入宽和高。
L=2*(a+b);//计算周长。
S=a*b;//计算面积。
printf("面积=%lf,周长=%lf
",S,L);//输出结果。
}四、注意事项:
因为没有限制输入为整型,所以使用浮点型用来存储各项值。输入输出要用%lf。
急求一C语言小游戏源程序 至少1000行哈 最好有解释
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<ctype.h>
typedef struct node
{
char data;
struct node*next;
}stack;//定义栈
//入栈操作
stack*push(stack*top,char x)
{
stack*p;
p=(stack*)malloc(sizeof(stack));//开辟节点
if(p==NULL)//如果开辟失败
{
printf("error!\n");
exit(1);
}
x=p->data;
p->next=top;
top=p;
return top;
}
//出栈操作
stack*pop(stack*top)
{
if(top==NULL)
{
printf("stack is null\n");
return top;
}
stack*q;
q=top;
top=top->next;
free(q);//释放节点
return top;
}
//读取栈顶元素
char get(stack*top)
{
if(top==NULL)//如果栈为空
{
printf("stack is null\n");
exit(1);
}
return top->data;
}
stack*getdel(stack*top,char*x)//读取栈顶元素,并删除
{
*x=get(top);
top=pop(top);
return top;
}
void change(char*a,char*b)//将中缀表达式转换为后缀表达式
{
int i=0,j=0;
char ch;
stack*top=NULL;
while(a[i]!='\0')
{
if(isdigit(a[i]))//如果读到数字
{
do
{
b[j]=a[i];//直接送入b
j++;i++;
}while(a[i]!='.');
b[j]='.';
}
if(a[i]=='(')//如果读到'('
top=push(top,a[i]);//直接压入栈中
if(a[i]==')')//如果读到')'
{
ch=get(top);//读取栈顶元素
while(ch!='(')
{
b[j]=ch;//送入b
j++;
top=pop(ch);
ch=get(top);
}
}
if(s[i]=='+'||s[i]=='-')
{
if(top!=NULL)
{
ch=get(top)
while(ch!='(')
{
b[j]=ch;
top=pop(top);
if(top==NULL)
break;
else
ch=get(top);
}
}
top=push(top,a[i])
}
if(a[i]=='*'||a[i]=='/')
{
if(top!=NULL)
{
ch=get(top)
while(ch=='*'||ch=='/')
{
b[j]=ch;
top=pop(top);
if(top==NULL)
break;
else
ch=get(top);
}
}
top=push(top,a[i])
}
i++;
}
while(top!=NULL)//若栈非空,则将栈中运算符依次出栈,送入b
top=getdel(top,&b[j++]);
}
int fun(char*s)//计算结果
{
stack*top=NULL;
int i=0,k=0,r,n,m;
while(s[i]!='\0')
{
if(isdigit(s[i]))//如果是数字
{
do
{
k=10*k+s[i]-48;//转换成数字
i++;
}while(s[i]!='.')
top=push(top,k);
k=0;
}
//如果读到运算符,则栈依次弹出两个数n和m,然后以m运算符n的形式计算,最后将结果入栈
if(s[i]=='+')
{
top=getdel(top,&n);
top=getdel(top,&m);
r=n+m;
top=push(top,r);
}
if(s[i]=='-')
{
top=getdel(top,&n);
top=getdel(top,&m);
r=n-m;
top=push(top,r);
}
if(s[i]=='*')
{
top=getdel(top,&n);
top=getdel(top,&m);
r=n*m;
top=push(top,r);
}
if(s[i]=='/')
{
top=getdel(top,&n);
top=getdel(top,&m);
r=n/m;
top=push(top,r);
}
i++;
}
top=getdel(top,&r);//最后的结果为栈顶元素
return r;
}
int check(char*a)//判断输入表达式是否正确
{
int i=0;
char ch;
while((ch=a[i])!='\0')
{
if(isdigit(ch))//如果是数字
{
if(isdigit(a[i+1]))//如果还是数字
{
i++;//接着读取
coutinue;
}
if(a[i+1]!='.')
{
//若数字不宜'.'结束,则输出错误信息
printf("This is wrong expross format!!!\n");
return 1;
}
i++;
}
i++;
}
return 0;
}
void card()
{
srand(time(0));
int i;
for(i=0;i<4;i++)
{
printf("%3d",rand()%13+1);
}
printf("\n");
}
void main()
{
char a[100],b[100],ch;
while(1)
{
printf("four digits are:");
card();
do
{
printf("input expression:");
scanf("%s%c",a,&ch);
}while(check(a));
change(a,b);
printf("%s=%d\n“,a,fun(b));
if(fun(b)==24)printf("You right!\n");
else printf("You wrong!\n");
printf("y/n:");
ch=getchar();
if(ch=='n'||ch=='N') break;
}
}
注:表达式要求数字末尾有确认符'.'
如何使用C语言编写简单小游戏
C语言是计算机专业都要学习的一门基础学科。一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣。
例如2048这款游戏:
方法/步骤:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
#define SIZE 4
static int score=0;
void putn(int n[][SIZE]);
void getn(int n[][SIZE]);
int isempty(int n[][SIZE]);
int isfull(int n[][SIZE]);
void math(int n[][SIZE],char c);
void tow(int n[][SIZE]);
void toa(int n[][SIZE]);
void tos(int n[][SIZE]);
void tod(int n[][SIZE]);
//主函数
int main()
{
int i,j;
int n[SIZE][SIZE];
char c='';
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
{
n[i][j]=0;
}
}
printf("***********************
"
" 2048(%dX%d)
"
" control:W/A/S/D
"
"press any key to begin
"
"***********************
",SIZE,SIZE);
getch();
system("cls");
//n[0][1]=2048;
//n[0][3]=2048;
while(1)
{
if(isempty(n))
getn(n);
putn(n);
if(!isempty(n)&&isfull(n))
break;
sleep(200);
c=getch();
while(c!='w'&&c!='a'&&c!='s'&&c!='d')
c=getch();
math(n,c);
system("cls");
}
printf(" Game Over!
",score);
return 0;
}
//函数
void putn(int n[][SIZE])
{
int i,j;
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
printf("|");
printf("|
");
for(j=0;j<SIZE;j++)
{
if(n[i][j]==0)
printf("|");
else
printf("|%4d",n[i][j]);
}
printf("|
");
for(j=0;j<SIZE;j++)
printf("|_____");
printf("|
");
}
printf("score:%d",score);
}
void getn(int n[][SIZE])
{
int a,b;
a=rand()%SIZE;
b=rand()%SIZE;
while(n[a][b]!=0)
{
a=rand()%SIZE;
b=rand()%SIZE;
}
n[a][b]=2;
}
int isempty(int n[][SIZE])
{
int i,j,count=0;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
if(n[i][j]==0)
count++;
return count;
}
int isfull(int n[][SIZE])
{
int i,j,count=0;
for(i=0;i<SIZE;i++)
{
for(j=1;j<SIZE-1;j++)
{
if(n[i][j]==n[i][j+1]||n[i][j]==n[i][j-1])
count++;
}
}
for(j=0;j<SIZE;j++)
{
for(i=1;i<SIZE-1;i++)
{
if(n[i][j]==n[i+1][j]||n[i][j]==n[i-1][j])
count++;
}
}
return count>0?0:1;
}
void math(int n[][SIZE],char c)
{
switch(c)
{
case'w':tow(n);break;
case'a':toa(n);break;
case's':tos(n);break;
case'd':tod(n);break;
default:;
}
}
void tow(int n[][SIZE])
{
int i,j,a;
int m[SIZE];
for(a=0;a<SIZE;a++)
m[a]=0;
for(j=0;j<SIZE;j++)
{
for(a=0;a<SIZE;a++)
{
for(i=0;i<SIZE-1;i++)
{
if(n[i][j]==0)
{
n[i][j]=n[i+1][j];
n[i+1][j]=0;
}
}
}
}
for(j=0;j<SIZE;j++)
{
for(a=0,i=0;i<SIZE;i++)
{
if(n[i][j]!=n[i+1][j]&&n[i][j]!=0||n[i][j]==2048)
{
m[a++]=n[i][j];
n[i][j]=0;
}
else if(n[i][j]==n[i+1][j])
{
m[a++]=n[i][j]+n[i+1][j];
score+=m[a-1];
n[i][j]=0,n[i+1][j]=0;
}
}
for(i=0;i<SIZE;i++)
{
n[i][j]=m[i];
m[i]=0;
}
}
}
void toa(int n[][SIZE])
{
int i,j,a;
int m[SIZE];
for(a=0;a<SIZE;a++)
m[a]=0;
for(i=0;i<SIZE;i++)
{
for(a=0;a<SIZE;a++)
{
for(j=0;j<SIZE-1;j++)
{
if(n[i][j]==0)
{
n[i][j]=n[i][j+1];
n[i][j+1]=0;
}
}
}
}
for(i=0;i<SIZE;i++)
{
for(a=0,j=0;j<SIZE;j++)
{
if(n[i][j]!=n[i][j+1]&&n[i][j]!=0||n[i][j]==2048)
{
m[a++]=n[i][j];
n[i][j]=0;
}
else if(n[i][j]==n[i][j+1])
{
m[a++]=n[i][j]+n[i][j+1];
score+=m[a-1];
n[i][j]=0,n[i][j+1]=0;
}
}
for(j=0;j<SIZE;j++)
{
n[i][j]=m[j];
m[j]=0;
}
}
}
void tos(int n[][SIZE])
{
int i,j,a;
int m[SIZE];
for(a=0;a<SIZE;a++)
m[a]=0;
for(j=SIZE-1;j>=0;j--)
{
for(a=SIZE-1;a>=0;a--)
{
for(i=SIZE-1;i>0;i--)
{
if(n[i][j]==0)
{
n[i][j]=n[i-1][j];
n[i-1][j]=0;
}
}
}
}
for(j=SIZE-1;j>=0;j--)
{
for(a=SIZE-1,i=SIZE-1;i>=0;i--)
{
if(n[i][j]!=n[i-1][j]&&n[i][j]!=0||n[i][j]==2048)
{
m[a--]=n[i][j];
n[i][j]=0;
}
else if(n[i][j]==n[i-1][j])
{
m[a--]=n[i][j]+n[i-1][j];
score+=m[a+1];
n[i][j]=0,n[i-1][j]=0;
}
}
for(i=SIZE-1;i>=0;i--)
{
n[i][j]=m[i];
m[i]=0;
}
}
}
void tod(int n[][SIZE])
{
int i,j,a;
int m[SIZE];
for(a=0;a<SIZE;a++)
m[a]=0;
for(i=SIZE-1;i>=0;i--)
{
for(a=SIZE-1;a>=0;a--)
{
for(j=SIZE-1;j>0;j--)
{
if(n[i][j]==0)
{
n[i][j]=n[i][j-1];
n[i][j-1]=0;
}
}
}
}
for(i=SIZE-1;i>=0;i--)
{
for(a=SIZE-1,j=SIZE-1;j>=0;j--)
{
if(n[i][j]!=n[i][j-1]&&n[i][j]!=0||n[i][j]==2048)
{
m[a--]=n[i][j];
n[i][j]=0;
}
else if(n[i][j]==n[i][j-1])
{
m[a--]=n[i][j]+n[i][j-1];
score+=m[a+1];
n[i][j]=0,n[i][j-1]=0;
}
}
for(j=SIZE-1;j>=0;j--)
{
n[i][j]=m[j];
m[j]=0;
}
}
}
OK,本文到此结束,希望对大家有所帮助。