编程100至2019之间,所有能被3整除且个位数字为5的数的个数?C语言程序:#include
void main()
{
int n;
int size = 0;
for(n=100; n
C语言代码有关图形库的游戏。
如何用C语言编写图形游戏?
标准的C是没有图形库的 图形库都是第3方的扩展的 比如 TC2.0 的graphics.h等等 用C写一般的Win32应用程序一般都是 VC6.0 (API 或者 MFC 就是你所说的能有按键那些的程序), 所以它要很好的C基础甚至C++基础才能学好 , 现在不要烦那个 黑不隆冬的dos界面 ,它是你学Win32应用程序的基础.所以我非常建议你认真把C读好,它的功能真的很强,一般高级语言能写的东西,他一般也是行的.用C语言编写具有图形界面的小游戏用什么编译器好
图形界面不复杂的话 可以用TC 不过代码量比较大 如果图形界面麻烦一些, 可以用VS自带的图形库,也可以走C++,用MFC或者QT用c语言编写俄罗斯方块程序 求详解
1、用C语言绘制图形界面
EasyX图形库(http://www.easyx.cn)即TC的图形库在VC下的移植。
包含库#include
先初始化图形窗口
initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW_WIDTH为窗口的宽带,WINDOW_HIGH为窗口的高度。
清空绘图设备
cleardevice();
设置画笔颜色
setcolor(RED) ;
设置线条风格
setlinestyle(PS_SOLID, NULL, 0);
画矩形
rectangle
还有画线、显示文字等函数,可以参照其帮助文档。
注意:由于我们用的是EasyX图形库,故源文件后缀要为.cpp,但其中内容都是C的语法。
2、存储表示出俄罗斯方块的形状
一、我们可以用编号,不同的编号代表不同的俄罗斯方块,根据编号把不同方块的画法写在代码中,这样19种
方块就得有19种相应的代码来描绘。而且这样扩展性不好,若以后设计了新的方块,则需要更改大量源代码。
二、我们很自然的想到可用字模点阵的形式来表示,即设置一个4行4列的数组,元素置1即代表这个位置有小
方块,元素置0即代表这个位置无小方块,这个整个的4*4的数组组成俄罗斯方块的形状。
1000
1000
1100
0000
这个方法挺靠谱,但我们还可以优化一下:不用4*4的数组,而是用16个bit位来表示这个点阵。这样存储起来比较方便,故我们用unsigned int的低16位来表示方块的点阵。
我们可以用掩码与表示俄罗斯方块的位进行操作,来识别并在屏幕上画出方块。
我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。
但这样做未免有点太费力,且扩展性也不太好,若以后设计的新方块种类加入,要改变数组rockArray中的值。
我们可以考虑把所有俄罗斯方块的点阵存储在配置文件中,在程序初始化时读取文件,把这些点阵转换成unsigned int的变量存储在rockArray中。
这样,以后我们增添新的方块形状只需要在配置文件中增加新的点阵即可。
@###
@###
@@##
####(为使得看起来更醒目,我们用@表示1,用#表示0)
3、让图形动起来
在某位置处用函数DrawRock在屏幕上画出俄罗斯方块,然后再擦除掉(即用背景色在原位置处重绘一次方块),最后在下落的下一个位置处用函数DrawRock在屏幕上画出俄罗斯方块,如此循环,中间用计时器间隔一段时间以控制下落的速度。
同理,按下屏幕的左右键也是如此,只是在按下键盘时把方块的位置重新计算了。
那么按下上方向键时,如何让方块翻转呢?
我们在配置文件中就把方块的顺时针翻转形态放在了一起:
@###
@###
@@##
####
@@@#
@###
####
####
@@##
#@##
#@##
####
##@#
@@@#
####
####
我们每按一次上方向键改变一次方块的形状即可。若一直按上键,形状应该是循环地翻滚。
我们想到了循环链表的数据结构可实现这个效果。
可是我们若把这些一种类的方块的各种形态串成循环链表形式,那么每次重新生成方块时我们就难以随机地生成方块了。
故还是得用数组来存储,但又要有循环链表的功能,于是我们想到了静态循环链表。
我们用结构体来作为一个方块在rockArray中的元素
typedef struct ROCK
{ //用来表示方块的形状(每一个字节是8位,用每4位表示方块中的一行)
unsigned int rockShapeBits ;
int nextRockIndex ; //下一个方块,在数组中的下标
} RockType ;
这样,当我们按下上方向键时,把传入函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。
参考资料:C语言图形界面篇
求一份c语言编写的图形化游戏源代码(不是控制台运行的)
#include
#include
typedefstruct{
intqq;
charstring[1024];
}C语言;
intmain(){
C语言c={563337217,"计算机C语言课程设计有偿助攻,看清楚了有偿助攻再加好友!\n总有穷逼和傻逼想不花钱让爹给你白写,你TMD以为你是谁啊。\n想让爹给你白写的滚一边去,省的挨骂!"};
printf("QQ:%d\n%s\n",c.qq,c.string);
return0;
}
c语言小游戏代码
“贪吃蛇”C代码,在dev C++试验通过(用4个方向键控制)
#include
#include
#include
#include
#include
#define W 78 //游戏框的宽,x轴
#define H 26 //游戏框的高,y轴
int dir=3; //方向变量,初值3表示向“左”
int Flag=0; //吃了食物的标志(1是0否)
int score=0; //玩家得分
struct food{ int x; //食物的x坐标
int y; //食物的y坐标
}fod; //结构体fod有2个成员
struct snake{ int len; //蛇身长
int speed; //移动速度
int x[100]; //蛇身某节x坐标
int y[100]; //蛇身某节y坐标
}snk; //结构体snk有4个成员
void gtxy( int x,int y) //控制光标移动的函数
{ COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void gtxy( int x,int y); //以下声明要用到的几个自编函数
void csh( ); //初始化界面
void keymove( ); //按键操作移动蛇
void putFod( ); //投放食物
int Over( ); //游戏结束(1是0否)
void Color(int a); //设定显示颜色的函数
int main( ) //主函数
{ csh( );
while(1)
{ Sleep(snk.speed);
keymove( );
putFod( );
if(Over( ))
{ system(“cls”);
gtxy(W/2+1,H/2); printf(“游戏结束!T__T”);
gtxy(W/2+1,H/2+2); printf(“玩家总分:%d分”,score);
getch( );
break;
}
}
return 0;
}
void csh( ) //初始化界面
{ int i;
gtxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下两行是隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
for(i=0;i<=W;i=i+2) //横坐标要为偶数,因为这个要打印的字符占2个位置
{Color(2); //设定打印颜色为绿色
gtxy(i,0); printf("■"); //打印上边框
gtxy(i,H); printf("■"); //打印下边框
}
for(i=1;i { gtxy(0,i); printf("■"); //打印左边框 gtxy(W,i); printf("■"); //打印右边框 } while(1) { srand((unsigned)time(NULL)); //初始化随机数发生器srand( ) fod.x=rand()%(W-4)+2; //随机函数rand( )产生一个从0到比”(W-4)”小1的数再加2 fod.y=rand()%(H-2)+1; //随机函数rand( )产生一个从0到比”(H-2)”小1的数再加1 if (fod.x%2==0) break; //fod.x是食物的横坐标,要是2的倍数(为偶数) } Color(12); //设定打印颜色为淡红 gtxy(fod.x,fod.y); printf("●"); //到食物坐标处打印初试食物 snk.len=3; //蛇身长初值为3节 snk.speed=350; //刷新蛇的时间,即移动速度初值为350毫秒 snk.x[0]=W/2+1; //蛇头横坐标要为偶数(因为W/2=39) snk.y[0]=H/2; //蛇头纵坐标 Color(9); //设定打印颜色为淡蓝 gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇头 for(i=1;i { snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1]; gtxy(snk.x[i],snk.y[i]); printf("■"); //打印蛇身 } Color(7, 0); //恢复默认的白字黑底 return; } void keymove( ) //按键操作移动蛇 { int key; if( kbhit( ) ) //如有按键输入才执行下面操作 { key=getch( ); if (key==224) //值为224表示按下了方向键,下面要再次获取键值 { key=getch( ); if(key==72&&dir!=2)dir=1; //72表示按下了向上方向键 if(key==80&&dir!=1)dir=2; //80为向下 if(key==75&&dir!=4)dir=3; //75为向左 if(key==77&&dir!=3)dir=4; //77为向右 } if (key==32) { while(1) if((key=getch( ))==32) break; } //32为空格键,这儿用来暂停 } if (Flag==0) //如没吃食物,才执行下面操作擦掉蛇尾 { gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf(" "); } int i; for (i = snk.len - 1; i > 0; i--) //从蛇尾起每节存储前一节坐标值(蛇头除外) { snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; } switch (dir) //判断蛇头该往哪个方向移动,并获取最新坐标值 { case 1: snk.y[0]--; break; //dir=1要向上移动 case 2: snk.y[0]++; break; //dir=2要向下移动 case 3: snk.x[0]-=2; break; //dir=3要向左移动 case 4: snk.x[0]+=2; break; //dir=4要向右移动 } Color(9); gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇头 if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物则执行以下操作 { printf("\7"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //7是响铃 else Flag = 0; //没吃到食物Flag的值为0 if(snk.speed<150) snk.speed= snk.speed+5; //作弊码,不让速度无限加快 } void putFod( ) //投放食物 { if (Flag == 1) //如吃到食物才执行以下操作,生成另一个食物 { while (1) { int i,n= 1; srand((unsigned)time(NULL)); //初始化随机数发生器srand( ) fod.x = rand( ) % (W - 4) + 2; //产生在游戏框范围内的一个x坐标值 fod.y = rand( ) % (H - 2) + 1; //产生在游戏框范围内的一个y坐标值 for (i = 0; i < snk.len; i++) //随机生成的食物不能在蛇的身体上 { if (fod.x == snk.x[i] &&fod.y == snk.y[i]) { n= 0; break;} } if (n && fod.x % 2 == 0) break; //n不为0且横坐标为偶数,则食物坐标取值成功 } Color(12); //设定字符为红色 gtxy(fod.x, fod.y); printf("●"); //光标到取得的坐标处打印食物 } return; } int Over( ) //判断游戏是否结束的函数 { int i; Color(7); gtxy(2,H+1); printf(“暂停键:space.”); //以下打印一些其它信息 gtxy(2,H+2); printf(“游戏得分:%d”,score); if (snk.x[0] == 0 || snk.x[0] == W) return 1; //蛇头触碰左右边界 if (snk.y[0] == 0 || snk.y[0] == H) return 1; //蛇头触碰上下边界 for (i = 1; i < snk.len; i++) { if (snk.x[0] == snk.x[i] && snk.y[0] == snk.y[i]) return 1; } //蛇头触碰自身 return 0; //没碰到边界及自身时就返回0 } void Color(int a) //设定颜色的函数 { SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a ); } 相关文章 数控车床内孔怎样编程和外圆的编程一样,只是你退刀的方向变为负方向即可,但不要太大,否则会撞着工件,以FANUC为例,若用G71循环的话,你只需把第2个U值变为负值即可,其精车路线和外圆 C语言中后加加和前加加什么意思后加加是先计算然后再把变量的值加1。前加加是先把变量的值加1然后再进行计算。C语言函数定义后边加一个字符是什么意思头文件:#inclue strnc 数控火焰切割机实际尺寸和画图的尺寸不一样,变大了。什么原因?参数?影响的原因有几点: 1、机床行走尺寸有误差了,这需要在数控系统或者伺服驱动器调节脉冲参数,具体依据系统或驱动 C语言 学生学籍管理系统 用结构体数组#include 如何用matlab实现petri网的建模Ctrl + g用来切换软件背景网格线的有无;鼠标中键用来添加库所;Ctrl +鼠标中键用来添加变迁;用鼠标中键在库所与变迁间拖拽可以添加弧。 他有专门 g71程序怎么编程?G71 外圆粗车循环(G71)指令格式: G71 X(U) I K L F ;其中:X(U)—精加工轮廓起点的X轴坐标值I---X轴方向每次进刀量,直径值表示,无符号数K---X轴方向每次退刀量 c51单片机内30h∼39h单元处存放了10个二进制数,计算它们的累加和,并将结果存放到起始地址SUM: MOV R0,#30H MOV 40H.#0 MOV 41H,#0 MOV R2,#10 LP: MOV A,@R0 ADD A,40H MOV 怎么编写这两个程序(C语言)第一道题:#include
#include
#include
structnode
{
intcode;
charname[20];
chartype;
intage;
intchinese;
intmath;
inttotal;
}stud[
#include
structList
{
inti;
structList*next;
};
voidCreate(List**pList,intstu)
{
inti;
List*p=NULL;
List*q=p;
for(