编程小游戏幻影(编程小游戏制作)

2023-11-19 00:56:55 数码极客 bianji01

 

怎么用编程猫制作夜空

相信很多小朋友都曾经在自己的内心想象过,如果自己拥有翅膀或者超能力,能够像小鸟和超级英雄们一样,自由的在天空飞翔,那是多么美妙的一件事情。

今天猫叔就教大家利用Scratch软件中现有的素材,做一只会飞行的“喵咪”,帮大家实现童年时的小愿望,怎么样啊

本节课动画

通过画面大家可以看出,咱们今天的故事其实就是通过建筑物、大树、云朵快速向后移动,让小猫看起来像在向前飞翔。

演出道具:

演出背景:

(可自行调整颜颜色)

猫叔逻辑分析时间

第一步:搭建舞台背景,请出演出道具。点击按钮,选择一个系统自带的纯色背景和猫咪形象。

第二步:让小猫动起来,并说出“飞行时间”。

这里想要让小猫动起来,就需要我们选择至少两个不同的小猫造型。

然后编写小猫的代码让小猫动起来,并说出“飞行时间”。

如果你想要将“飞行时间”这个声音加入游戏视频中,只需要先录好音频并上传到软件库中,最后在程序中加入播放声音的程序就可以了哦。

第三步:加入房子、大树、白云等移动的背景物,让小猫的飞行看起来更真实。

这些素材都在角色库中,大家像添加小猫时一样,点击按钮选择对应形象就可以了。

不过比较赞的是,Scratch软件中有将这些角色统一打包的造型,咱们只需选择一个,就获得了一套的使用素材,无需一个一个进行添加!

下面咱们就开始让房子向后动起来:

房子的程序

大树和白云的运动轨迹和房子同理,所以咱们只需要在将房子的程序分别复制到大树和白云上,然后根据实际情况调整具体数值和位置就可以了哦!

大树的程序

白云的程序

但是在编写程序之前,我们会发现大树和白云的形象在画面中可能会过大,所以需要调整他们的大小:在造型中选中该造型进行适当的缩小就可以了。

第四步:加入音乐,使视频播放起来更加舒服。

大家可以先下载好自己想要的音乐直接上传,然后在任一角色添加以下程序就可以了。

当这些都做完之后,咱们的小猫就已经可以在空中飞起来了!试着运行一下吧:

咱们今天的课程,需要明确知道scratch的知识点:舞台的坐标系。掌握scratch舞台中坐标的最大值与最小值X(-240,240)Y(-180,180)。

能不能介绍点C语言编程的小游戏,例如贪吃蛇,。。好玩点的。要有代码,谢谢了

可以学写“俄罗斯方块”代码:

#include

#include

#include

#include

#defineZL4//坐标增量,不使游戏窗口靠边

#defineW36//游戏窗口的宽度

#defineH20//游戏窗口的高度

inti,j,Ta,Tb,Tc;//Ta,Tb,Tc用于记住和转换方块变量的值

inta[60][60]={0};//标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框

intb[4];//标记4个"口"方块:1有,0无,类似开关

intx,y,level,score,speed;//方块中心位置的x,y坐标,游戏等级、得分和游戏速度

intflag,next;//当前要操作的方块类型序号,下一个方块类型序号

voidgtxy(intm,intn);//以下声明要用到的自编函数

voidsetColor(unsignedshortp,unsignedshortq);//设定显示颜色

voidgflag();//获得下一方块类型的序号

voidcsh();//初始化界面

voidstart();//开始部分

voidprfk();//打印方块

voidclfk();//清除方块

voidmkfk();//制作方块

voidkeyD();//按键操作

intifmov();//判断能否移动

voidclHA();//清除满行的方块

voidclNEXT();//清除边框外的NEXT方块

intmain()

{csh();

while(1)

{start();

while(1)

{setColor(5,0);

prfk();Sleep(speed);clfk();

Tb=x;Tc=flag;//临存当前x坐标和序号,以备撤销操作

keyD();

y++;//方块向下移动

if(ifmov()==0){y--;setColor(2,0);prfk();clHA();break;}//不可动时的操作

for(i=y-2;i

if(j==0){system("cls");gtxy(10,10);setColor(6,0);

printf("游戏结束!");getch();break;}

clNEXT();

return0;

voidgtxy(intm,intn)//控制光标移动

{COORDpos;//定义变量

pos.X=m;//横坐标

pos.Y=n;//纵坐标

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);//获得显示器句柄

voidsetColor(unsignedshortForeColor=7,unsignedshortBackGroundColor=0)

{HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(handle,ForeColor+BackGroundColor*0x10);

voidcsh()//初始化界面

{gtxy(ZL+W/2-5,ZL-2);setColor(10,0);printf("俄罗斯方块");//打印游戏名称

gtxy(ZL+W+3,ZL+7);setColor(5,0);printf("*******NEXT:");//打印菜单信息

gtxy(ZL+W+3,ZL+13);setColor(5,0);printf("************");

gtxy(ZL+W+3,ZL+15);setColor(9,0);printf("Esc:退出游戏");

gtxy(ZL+W+3,ZL+17);setColor(9,0);printf("↑键:变体");

gtxy(ZL+W+3,ZL+19);setColor(9,0);printf("空格:暂停游戏");

gtxy(ZL,ZL);setColor(2,0);printf("╔");gtxy(ZL+W-2,ZL);printf("╗");//打印框角

gtxy(ZL,ZL+H);printf("╚");gtxy(ZL+W-2,ZL+H);printf("╝");

a[ZL][ZL+H]=2;a[ZL+W-2][ZL+H]=2;//记住有图案

for(i=2;i

for(i=2;i

for(i=1;i

for(i=1;i

CONSOLE_CURSOR_INFOcursor_info={1,0};//以下是隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

level=1;score=0;speed=400;

gflag();flag=next;//获得一个当前方块序号

voidgflag()//获得下一个方块类型的序号

{srand((unsigned)time(NULL));next=rand()%19+1;}

voidstart()//开始部分

{gflag();Ta=flag;flag=next;//保存当前方块序号,将下一方块序号临时操作

x=ZL+W+6;y=ZL+10;setColor(5,0);prfk();//给x,y赋值,在框外打印出下一方块

flag=Ta;x=ZL+W/2;y=ZL-1;//取回当前方块序号,并给x,y赋值

voidprfk()//打印俄罗斯方块

{for(i=0;i<4;i++){b[i]=1;}//数组b[4]每个元素的值都为1

mkfk();//制作俄罗斯方块

for(i=x-2;i<=x+4;i+=2)//打印方块

{for(j=y-2;j<=y+1;j++){if(a[i][j]==1&&j>ZL){gtxy(i,j);printf("□");}}}

gtxy(ZL+W+3,ZL+1);setColor(9,0);printf("level:%d",level);//以下打印菜单信息

gtxy(ZL+W+3,ZL+3);setColor(9,0);printf("score:%d",score);

gtxy(ZL+W+3,ZL+5);setColor(9,0);printf("speed:%d",speed);

voidclfk()//清除俄罗斯方块

{for(i=0;i<4;i++){b[i]=0;}//数组b[4]每个元素的值都为0

mkfk();//制作俄罗斯方块

for(i=x-2;i<=x+4;i+=2)//清除方块

{for(j=y-2;j<=y+1;j++){if(a[i][j]==0&&j>ZL){gtxy(i,j);printf("");}}}

voidmkfk()//制作俄罗斯方块

{a[x][y]=b[0];//方块中心位置状态:1-有,0-无

switch(flag)//共6大类,19种小类型

{case1:{a[x][y-1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//田字方块

case2:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x+4][y]=b[3];break;}//直线方块:----

case3:{a[x][y-1]=b[1];a[x][y-2]=b[2];a[x][y+1]=b[3];break;}//直线方块:|

case4:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x][y+1]=b[3];break;}//T字方块

case5:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y]=b[3];break;}//T字顺时针转90度

case6:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x+2][y]=b[3];break;}//T字顺转180度

case7:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y]=b[3];break;}//T字顺转270度

case8:{a[x][y+1]=b[1];a[x-2][y]=b[2];a[x+2][y+1]=b[3];break;}//Z字方块

case9:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x-2][y+1]=b[3];break;}//Z字顺转90度

case10:{a[x][y-1]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字顺转180度

case11:{a[x][y+1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字顺转270度

case12:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y-1]=b[3];break;}//7字方块

case13:{a[x-2][y]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//7字顺转90度

case14:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y+1]=b[3];break;}//7字顺转180度

case15:{a[x-2][y]=b[1];a[x-2][y+1]=b[2];a[x+2][y]=b[3];break;}//7字顺转270度

case16:{a[x][y+1]=b[1];a[x][y-1]=b[2];a[x+2][y-1]=b[3];break;}//倒7字方块

case17:{a[x-2][y]=b[1];a[x+2][y+1]=b[2];a[x+2][y]=b[3];break;}//倒7字顺转90度

case18:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y+1]=b[3];break;}//倒7字顺转180度

case19:{a[x-2][y]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//倒7字顺转270度

voidkeyD()//按键操作

{if(kbhit())

{intkey;

key=getch();

if(key==224)

{key=getch();

if(key==75){x-=2;}//按下左方向键,中心横坐标减2

if(key==77){x+=2;}//按下右方向键,中心横坐标加2

if(key==72)//按下向上方向键,方块变体

{if(flag>=2&&flag<=3){flag++;flag%=2;flag+=2;}

if(flag>=4&&flag<=7){flag++;flag%=4;flag+=4;}

if(flag>=8&&flag<=11){flag++;flag%=4;flag+=8;}

if(flag>=12&&flag<=15){flag++;flag%=4;flag+=12;}

if(flag>=16&&flag<=19){flag++;flag%=4;flag+=16;}}

if(key==32)//按空格键,暂停

{setColor(5,0);prfk();while(1){if(getch()==32){clfk();break;}}}//再按空格键,继续游戏

if(ifmov()==0){x=Tb;flag=Tc;}//如果不可动,撤销上面操作

else{setColor(5,0);prfk();Sleep(speed);clfk();Tb=x;Tc=flag;}//如果可动,执行操作

intifmov()//判断能否移动

{if(a[x][y]!=0){return0;}//方块中心处有图案返回0,不可移动

else{if((flag==1&&(a[x][y-1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||//田字方块

(flag==2&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x+4][y]==0))||//以下为其它方块

(flag==3&&(a[x][y-1]==0&&a[x][y-2]==0&&a[x][y+1]==0))||

(flag==4&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x][y+1]==0))||

(flag==5&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y]==0))||

(flag==6&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x+2][y]==0))||

(flag==7&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x+2][y]==0))||

(flag==8&&(a[x][y+1]==0&&a[x-2][y]==0&&a[x+2][y+1]==0))||

(flag==9&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x-2][y+1]==0))||

(flag==10&&(a[x][y-1]==0&&a[x-2][y-1]==0&&a[x+2][y]==0))||

(flag==11&&(a[x][y+1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||

(flag==12&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y-1]==0))||

(flag==13&&(a[x-2][y]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||

(flag==14&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x+2][y+1]==0))||

(flag==15&&(a[x-2][y]==0&&a[x-2][y+1]==0&&a[x+2][y]==0))||

(flag==16&&(a[x][y+1]==0&&a[x][y-1]==0&&a[x+2][y-1]==0))||

(flag==17&&(a[x-2][y]==0&&a[x+2][y+1]==0&&a[x+2][y]==0))||

(flag==18&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y+1]==0))||

(flag==19&&(a[x-2][y]==0&&a[x-2][y-1]==0&&a[x+2][y]==0))){return1;}

return0;//其它情况返回0

voidclNEXT()//清除边框外的NEXT方块

{flag=next;x=ZL+W+6;y=ZL+10;clfk();}

voidclHA()//清除满行的方块

{intk,Hang=0;//k是某行方块个数,Hang是删除的方块行数

for(j=ZL+H-1;j>=ZL+1;j--)//当某行有W/2-2个方块时,则为满行

{k=0;for(i=ZL+2;i

{if(a[i][j]==1)//竖坐标从下往上,横坐标由左至右依次判断是否满行

{k++;//下面将操作删除行

if(k==W/2-2){for(k=ZL+2;k

for(k=j-1;k>ZL;k--)

{for(i=ZL+2;i

{if(a[i][k]==1){a[i][k]=0;gtxy(i,k);printf("");a[i][k+1]=1;gtxy(i,k+1);

setColor(2,0);printf("□");}}

j++;//方块下移后,重新判断删除行是否满行

Hang++;//记录删除方块的行数

score+=100*Hang;//每删除一行,得100分

if(Hang>0&&(score%500==0||score/500>level-1))//满500分速度加快,升一级

{speed-=20;level++;if(speed<200)speed+=20;}

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告