当前位置:首页 » 编程语言 » c语言十章精灵走动和金币布局
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言十章精灵走动和金币布局

发布时间: 2022-10-03 11:18:10

① 海盗分金币用C/C++语言程序表示

http://acm.hit.e.cn/index.php?option=com_wrapper&Itemid=39
有道ACM的题和你的题一样.我把这ACM的题的答案给你!
#include<stdio.h>
int main()
{
int n,m,answer;
while(scanf("%d %d",&n,&m)==2)
{
answer=m-(n-1)/2;
if(answer>0)
printf("%d\n",answer);
else
printf("0\n");
}
return 0;
}

② 利用c语言能实现按键精灵的模拟按键功能吗

调win32api函数SendMessage实现模拟按键

#include <windows.h>

...

SendMessage(hWnd,WM_KEYDOWN,键值,0);

...

其中hWnd是目标窗口的句柄

值是被宏定义过的,VK_ENTER回车,VK_ESC是ESC,VK_A是A键等

目标窗口句柄可以通过HWND hwnd=FindWindow("窗口名");获得

③ 怎么用C语言写出一个让程序自动按键的,只要按两个键就够了

c语言完成这个有点难,用按键精灵吧,实现这个很简单的。
退出程序的话,用编程来说,你可以先选定你程序的窗口句柄,然后直接关掉这个窗口,你要是想纯模拟键盘操作的话,你还得考虑当前焦点在不在你的程序窗口上。

④ C语言程序设计这门课一共有多少章节

这门课一共有10个章节。包括:第一章C语言编程基础(初级),第二章流程控制(初级),第三章综合实例(初级),第四章数组(中级),第五章指针初步(中级),第六章字符串(中级),第七章结构体和共用体(中级),第八章函数进阶(中级),第九章预处理指令、综合案例(中级),第十章指针进阶(高级),。

⑤ 如何用c语言编写一个程序运行时控制鼠标自动移动点击图标执行程序

用c语言写这个很麻烦的,其实有更好的工具,------《按键精灵》 很好用,用它写点击图标的程序很简单,就几行代码,楼主可以试试,但如果你非要用c语言写的话可以去了解下系统给鼠标的api ,相对来说很麻烦的。
-物联网校企联盟技术部

⑥ 用c语言在funcode上做黄金矿工的游戏 求发整个文件

//funcode黄金矿工源文件
#include"CommonAPI.h"
#include"stdio.h"
#include"string.h"
voidDrawHookLine();
intg_fGoldBornMinX=0;
intg_fGoldBornMaxX=0;
intg_fGoldBornMinY=0;
intg_fGoldBornMaxY=0;
intg_iGoldCount=20;
intg_iGameState=2;
intflag=1;
floatScore=0.f;
intflagnum=0;
charszGotGoldName[20];//当前抓到金子的名称
floatg_fHookRotation=0.f;
floatg_fEmptyHookSpeed=35.f;
floatfTimeDelta;
floatg_fHookStartPosX;//存储钩子的初始X位置
floatg_fHookStartPosY;//存储钩子的初始Y位置
///////////////////////////////////////////////////////////////////////////////////////////
//
//主函数入口
//
//////////////////////////////////////////////////////////////////////////////////////////
intPASCALWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//初始化游戏引擎
if(!dInitGameEngine(hInstance,lpCmdLine))
return0;
//游戏初始化代码
dSetWindowTitle("黄金矿工");
g_fGoldBornMinX=dGetScreenLeft()+5;//金子左边界
g_fGoldBornMaxX=dGetScreenRight()-5;//金子右边界
g_fGoldBornMinY=dGetScreenTop()+20;//金子上边界
g_fGoldBornMaxY=dGetScreenBottom()-5;//金子下边界
g_fHookStartPosX=dGetSpritePositionX("GoldHook");//获取钩子的初始X坐标
g_fHookStartPosY=dGetSpritePositionY("GoldHook");//获取钩子的初始Y坐标
dSetSpriteCollisionSend("goldHook",1);
dSetSpriteCollisionReceive("goldTemplate",1);
constfloatfRotateSpeed=45.f;//摇摆速度,单位度/秒
intiHookRotToLeft=1;//钩子摆动的方向:1←;0→
floatfTimeDelta=dGetTimeDelta();
//引擎主循环,处理屏幕图像刷新等工作
while(dEngineMainLoop())
{
//获取两次调用之间的时间差,传递给游戏逻辑处理
floatfTimeDelta=dGetTimeDelta();
DrawHookLine();
//执行游戏主循环
if(g_iGameState==0)
{
floatfThisRotate=fRotateSpeed*fTimeDelta;
if(iHookRotToLeft)
{
g_fHookRotation+=fThisRotate;
if(g_fHookRotation>=180.f)
{
g_fHookRotation=180.f;
iHookRotToLeft=0;
}
}
else
{
g_fHookRotation-=fThisRotate;
if(g_fHookRotation<=0.f)
{
g_fHookRotation=0.f;
iHookRotToLeft=1;
}
}
dSetSpriteRotation("GoldHook",g_fHookRotation);
}
elseif(g_iGameState==1)
{
dSetTextValue("Score",Score);
//播放拉金块的动作
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",1);//获取钩子X方向的速度
floatfSpeedX=dGetSpriteLinearVelocityX("GoldHook");
//获取钩子Y方向的速度
floatfSpeedY=dGetSpriteLinearVelocityY("GoldHook");
//当速度接近为0时,即可判定其已到达初始点
if(fSpeedX<0.00001f&&fSpeedX>-0.00001f&&
fSpeedY<0.00001f&&fSpeedY>-0.00001f)
{
//解除金块与钩子的锚定
dSpriteDismount(szGotGoldName);
//删除获取的金块
dDeleteSprite(szGotGoldName);
//回拉结束,设定状态为0
g_iGameState=0;
if(flagnum)
{g_iGoldCount--;
}
}
}
//播放挖金者的动作(恢复初始守候动作)
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation2",1);
if(g_iGoldCount==0)
{
g_iGameState=0;
Score=0;
dSetSpriteVisible("GameBegin",1);
g_iGoldCount=20;
flag=1;
}
};
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation2",1);

//关闭游戏引擎
dShutdownGameEngine();
return0;
}
//==========================================================================
//
//引擎捕捉鼠标移动消息后,将调用到本函数
voiddOnMouseMove(constfloatfMouseX,constfloatfMouseY)
{
//可以在此添加游戏需要的响应函数
}
//==========================================================================
//
//引擎捕捉鼠标点击消息后,将调用到本函数
voiddOnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY)
{
//可以在此添加游戏需要的响应函数
}
//==========================================================================
//
//引擎捕捉键盘按下消息后,将调用到本函数
//分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。比如可以判断Ctrl+E组合键
voiddOnKeyDown(constintiKey,constintiAltPress,constintiShiftPress,constintiCtrlPress)
{
//可以在此添加游戏需要的响应函数
if(iKey==KEY_SPACE)
{
g_iGameState=1;//初始化之后,将游戏状态设置为进行中
dSetSpriteVisible("GameBegin",0);
//生成金子
intiLoop=0;//循环变量控制
intiSize=4,iPosX=0,iPosY=0;//iSize表示金块大小的变量
if(flag)
{
for(iLoop=0;iLoop<g_iGoldCount;iLoop++)
{
if(iLoop<10)//生成10个小金块,大小为4
{
iSize=4;
}
elseif(iLoop>=10&&iLoop<16)//生成6个中金块,大小为6
{
iSize=6;
}
else//生成4个大金块,大小为8
{
iSize=8;
}//初始化金子精灵实例
char*tmpName;
//生成金块名字
tmpName=dMakeSpriteName("GoldBlock",iLoop);
dCloneSprite("goldTemplate",tmpName);
//设置金块的宽度
dSetSpriteWidth(tmpName,(float)iSize);
//设置金块的高度
dSetSpriteHeight(tmpName,(float)iSize);
//设置金子精灵位置
iPosX=dRandomRange(g_fGoldBornMinX,g_fGoldBornMaxX);
iPosY=dRandomRange(g_fGoldBornMinY,g_fGoldBornMaxY);
dSetSpritePosition(tmpName,(float)iPosX,(float)iPosY);
flag=0;
}
}
if(g_iGoldCount==0)
{
flag=1;
g_iGoldCount=20;
}
}
if(iKey==KEY_S&&g_iGameState==0)
{//按下↓并且游戏状态为"0"
g_iGameState=2;//置游戏状态为2,可用于控制钩子是否摆动
//以当前朝向给钩子一个向前的速度
dSetSpriteLinearVelocityPolar("GoldHook",g_fEmptyHookSpeed,g_fHookRotation);
//播放挖金者的动作(一个胳膊往下压的动作)
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1",0);
//0表示播放一次,这里胳膊往下压就是一次
}
}
//==========================================================================
//
//引擎捕捉键盘弹起消息后,将调用到本函数
voiddOnKeyUp(constintiKey)
{
//可以在此添加游戏需要的响应函数
}
//===========================================================================
//
//引擎捕捉到精灵与精灵碰撞之后,调用此函数
voiddOnSpriteColSprite(constchar*szSrcName,constchar*szTarName)
{
//发起者为GoldHook,接受者含有GoldBlock字段

if(strcmp(szSrcName,"GoldHook")==1&&strstr(szTarName,"GoldBlock")!=NULL)
{
//将金块锚定在钩子上
dSpriteMountToSpriteLinkPoint(szTarName,"GoldHook",2);
//使钩子向初始位置移动,即会拉
dSpriteMoveTo("GoldHook",g_fHookStartPosX,g_fHookStartPosY,g_fEmptyHookSpeed,1);
//复制并保存当前抓取到金块的名称
strcpy(szGotGoldName,szTarName);
//发起者为GoldHook,接受者含有GoldBlock字段
//根据金子大小,计算钩子的往回收的速度,越大的越慢。
//算法:之前设置的金子大小为4,6,8,用10减去该大小再除以10,得到3个小数:0.6,0.4,0.2.该小数乘以空钩子的速度即得到挂接不同金子后的实际速度
floatfWidth=dGetSpriteWidth(szTarName);
floatfSpeed=((10.f-fWidth)/10.f)*g_fEmptyHookSpeed;
Score+=fWidth;
//钩子往初始位置移动
dSpriteMoveTo("goldhook",g_fHookStartPosX,g_fHookStartPosY,fSpeed,1);
//播放拉金块的动作
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1",0);
g_iGameState=1;
flagnum=1;
}
}
//===========================================================================
//
//引擎捕捉到精灵与世界边界碰撞之后,调用此函数.
//iColSide:0左边,1右边,2上边,3下边
voiddOnSpriteColWorldLimit(constchar*szName,constintiColSide)
{
if(strcmp(szName,"GoldHook")!=0)
{
//碰到边界的为钩子时
//同样设置为回拉,只是没有碰到金子
dSpriteMoveTo(szName,g_fHookStartPosX,g_fHookStartPosY,g_fEmptyHookSpeed,1);
//播放拉金块的动作
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",0);g_iGameState=1;
flagnum=0;
}
}
voidDrawHookLine()
{
//首先,从矿工精灵上获取一个缆绳链接点作为绳子的起始点
floatfStartX=dGetSpriteLinkPointPosX("GoldMan",1);
floatfStartY=dGetSpriteLinkPointPosY("GoldMan",1);
//绳子终点在钩子精灵上获取
floatfEndX=dGetSpriteLinkPointPosX("GoldHook",1);
floatfEndY=dGetSpriteLinkPointPosY("GoldHook",1);
//在这两点之间划线.线的颜色红绿蓝值都为50,即灰色
dDrawLine(fStartX,fStartY,fEndX,fEndY,2.f,0,50,50,50,255);
}

⑦ C语言中错误的整型变量新人麻烦详细说明一下谢谢

在上一章我们了解C语言的基本结构并手写了第一个C程序,当然由于一些操作上的失误,导致了未能给大家展示编写程序的截图。哦,还有小伙伴问我用的什么软件,我现在在用dev。

上一章的截图

那么我们也要开始对今天的内容进行学习了,今天我们应该开始学习一些C语言中的基本概念,常量与变量、各种类型数据的储存空间以及C数据的运算。

因为篇幅原因我们将分三小节进行讲解。

一、常量与变量

1. 常量

常量是一种固定值,在程序执行期间不会改变。这些固定的值,又叫作字面量。

常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。关于这些基本的数据类型我们将在下一小节进行详细的讲解。

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。例如我们定义一个常量a的值是22,那么用十进制表示是 int a=22;,那么如果换做用八进制表示呢?此时该语句就会变为 int a=026;,对,下面的语句就是用十六进制表示的 int a=0X16;诶这个时候是不是有点懵?别紧张,我们当时也懵。那么你是不是想了解怎么进行单位的换算呢?不过,大可不必,因为基本是用不到的。除非你自己想用。

有时整数常量也可以带一个后缀,后缀是U和L的组合,U 表示无符号整数,L 表示长整数。后缀可以是大写,也可以是小写,U和 L的顺序任意。那他们在什么时候使用呢?

以下是引用的内容:

字面量整数数字如果在int整数范围内,就默认是int类型的,如果超过了int整数范围,就默认是long类型的。 int的范围是负20多亿到正20多亿,10十位数字,34359738368明显11位数字,已经超过int范围,默认就是long型的,后面加不加L都是一样的。 在int范围内的整数字面量后加L才有实际意义。

这个东西现阶段基本也用不到

浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含小数点、指数,或同时包含两者。当使用指数形式表示时,必须包含整数部分、小数部分,或同时包含两者。带符号的指数是用 e 或 E 引入的。

字符常量

是括在单引号中,例如,‘x’ 可以存储在char类型的简单变量中。关于char这一关键字,我们在后面的小节中会给予解释。

字符常量可以是一个普通的字符 ‘x’、一个转义序列‘\t',或一个通用的字符‘\u02C0’。

在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符\n或制表符\t等

下图是一些转义字符及其含义,图片为引用内容

字符串常量

字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。当然如果你要打个句子,又没用汉语,又想让人看懂,不被打,就可以使用空格做分隔符。举个栗子,例如你想打个英文“Hello world”结果你搞了个“Helloworld”,这是两个词,再多了,嗯那和乱码也就没有区别了。

2. 变量

在了解完常量之后我们接下来就是了解一下C语言中的变量。在C语言中变量其实是程序可操作的存储区的名称,就像是你我的名字一样,代表我们这个人,而C的变量就是代表了储存区。

并且每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头,划重点不要尝试拿数字做开头,他不对。大写字母和小写字母是不同的,因为 C 是大小写敏感的,换句话说就是假定你定义了一个变量temp,那么TEMP,Temp并不等于temp,而是作为两个单独的其他变量。

还有C中的左值和右值是两种类型的表达式

以下内容来自引用:

左值:指向内存位置的表达式被称为左值表达式。左值可以出现在赋值号的左边或右边。

右值:术语右值指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

举个例子

a=3;

a,就是左值,为嘛?他在左边啊,你不会这都猜不到吧? 那右值你肯定也了解了吧。至于上面的定义也很好理解,就是一个具体的值不能放在左边。为啥?你仔细想想给一个变量赋予一个值或另一个变量我可以理解,但给一个具体的值赋一个变量这叫个什么事。

二、各种类型数据的储存空间

在结束第一节的学习后我们要进行第二节的学习,在这一节我们要了解各种各样类型的数据。数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。这一节将向大家介绍一下一些基本的常用的数据类型。

int,是整型类型。

int a;

就是将变量a定义为一个整型变量,那么a如果被输出,那么a只能是一个整数,换句话数,a只能能精确到个位数。

float、double则恰恰相反,他们则是浮点类型,对于他们而言与int的区别就是,他们可以将数值精确到小数点后。而二者之间的不同则是精确范围的不同,double要优于float。前者是15位而后者只有6位。

上面三者都与数字有关而下面这一位就有所不同了,他可以定义字符。

char a= ‘x’;

则是将a定义为字符‘x’,输出a的时候将会在屏幕上显示字符‘x’,当然有的小伙伴可能输出的是120啊,78啊,或这空白啊之类的,这是你们犯了一些小小的错误。

示例如下

以上这些就是目前前期你大概率会天天碰到的一些数据类型了,当然还有一些像void 类型

枚举类型,派生类型这些数据类型,在这里就不多作介绍了。有兴趣的小伙伴们可以去自行网络一下哦。

三、C数据的运算

C语言中的数据运算形式非常多,基本上你在数学上学到的这里都有,加减乘除,非或与,大于小于等于不等于......

在这里我会为大家介绍一些新一点的运算符

1:++、--:++为自增运算符,--为自减运算符,二者正好相反。以--为例,我们先 int a=10

此时a--将得到9,但要注意a=b--;与a=--b;是两个操作,a=b--;是先把b的值赋给a在对b进行自减操作,而a=--b;则是先对b进行自减,然后再把b的值赋给a。

还有一种是这种形式的a+=b;其意义为a=a+b;当然类似的运算还有-=,/=,%=......

老规矩详细的运算规则及解释我就留在下面了。

以下图片均来自引用:

那你可能又有疑问产生了,这么多的规则那么它们之间的运算规则又是什么呢?废话不多说,我们直接上图:

好了今天的内容就到此为止了,如果有什么疑问可以私信我哦!

⑧ C语言。用*画出一个sin图像(可升200金币)

#define BL 15
#define PI 3.1415926
void main() { double x,y,t; int yy,i,b;
for ( x=0;x<=360;x+=BL ) {
t=PI*x/180; //转换为弧度制取值
y=sin(t);
yy=y*20+36;//y轴原点位于36字符处
for ( i=0;i<72;i++ ) {
b=0;
if ( i==yy ) { printf("*"); b=1; }
if ( i==35 && b==0 ) { printf("|"); b=1; }
if ( b==0 ) printf(" ");
}
printf("\n");
}
}

⑨ c语言编写小精灵游戏,小精灵是怎样计时,并且动起来的,不受按键的影响。。。

你得不断的重画屏幕,以每秒24帧。比如你要1秒钟移动一格,就可以一秒钟重画一次,但是这样子人眼可以看到闪动,所以就要求每秒画24帧

⑩ C语言问题

我还有前四题
(1) 基础部分(以下8题,任选5题—60%,多做酌情加分)
①分屏处理数据系统:
随机产生1000个数,并分屏显示(每行显示10个数字,每页显示10行),而且在每一屏的下方显示本屏中数据的最大值、最小值和平均值。
提示:循环显示,在分屏点上输出press any key to continue…,通过getch()函数让用户以按回车键的方式进入下一屏。

②掷骰子游戏:
两人玩骰子,游戏规则如下:
1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。
2) 将每人每次的分值累加计分
3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。
4) 结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。最后显示双方分数并判定优胜者。

③射击游戏:
在程序运行时屏幕上方第一行随机出现一个 符号,要求游戏者输入一个1-200之间的整数,当用户输入一个整数后,一个*立即从屏幕底端的该整数列向上移动,若移动到屏幕的顶端能撞上 符号,则游戏者获胜;若没有撞上,则要求再输入一个整数,共允许输入5次,如果一直没有撞上,则认为游戏者输。
提示:
1)输入 符号可以采用printf("%c",'\1')
2)显示*号向上移动:输出一些空行;输出*号;以循环的方式增加延时(for(i=0;i<100000;i++););clrscr()清屏重新绘制*号。

④车票问题:
假设某线路的公共汽车共设置26个车站,准备了1元、2元…6元的车票,收费标准为:6站以内票价为1元,每4站票价增加1元。现在随机生成一些乘客的上车站与下车站,显示每位乘客应付的票价和单程售出的总票价,并统计几元的车票卖得最多。