单元一、流程结构

单元一、流程结构

第二次笔记:流程结构多层嵌套与游戏框架

一、复习上次笔记知识

1.首先要知道三种流程结构:顺序、选择、循环

2.六种流程结构的表示方式:

①顺序:按照顺序一步步执行②二选一 :ifelse③多选一:switch④每当型:>=0 while ⑤直到型:>=1 do-while ⑥万能型:for循环

3.当遇到复杂的流程时:

顺序:分辨先后

选择:分辨主次

循环:分辨外内

4.代码的规范书写

注意:务必先写框架,在往框架中填写内容

二、知识点

1.C语言中没有bool(布尔)类型。在C语言中,真假的逻辑值是用数字0表示false(假的),用!0(非0,一般是1)表示true(真)

例如:

int sex = 1;//1 代表男 0 代表女 这里的 1或0就是一个逻辑值True/False
if(sex==1) //与 if(sex) 代表的逻辑含义是相同的
if(sex==1) //判断sex当前值是否是 1
if(sex) //判断sex当前值是否非0 非0即代表了True 如果是0 就代表了False

2.遇到for循环时,要注意里外层的变量变化方式。

for(初始化;逻辑表达式;修改循环变量)

初始化是指循环变量定义和初始化的位置

逻辑表达式,也就是循环执行的条件部分。如果表达式为假,循环结束

在这里插入图片描述

**重要:**循环的次序

初始化–(只执行一次)

执行逻辑表达式–语句–修改循环变量 --(第一个循环)

执行逻辑表达式—语句—修改循环变量 --(第二个循环)

执行逻辑表达式–语句–修改循环变量–(第三个循环)

执行逻辑表达式—表达式为假,结束循环

例如执行语句

int i;

for(i=0;i<4;i++)

{

printf(“%d”,i);

}

执行过程为:

i的初始化为0

第一次循环:“0<4"为真–输出0–i增加1—i=1;

第二次循环:"1<4"为真—输出1–i增加1—i=2;

第三次循环:"2<4"为真—输出2–i增加1—i=3;

第四次循环:"3<4"为真—输出3–i增加1—i=4;

循环结束:"4<4"为假,结束循环

三、基于easy-X二次封装的游戏框架

建议:如果想要独立设计开发一款小游戏,最好新建一个项目,一个项目里,只有一个游戏框架的源文件。

以下是学习时用到的代码

#include <easyx.h>
#include <time.h>
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<graphics.h>
//TODO: 全局变量声明位置
/*设置100即每隔100毫秒刷新以下界面绘图。*/
int interval = 100;//TODO: 设置定时器时间间隔(单位毫秒)
/* 窗口宽度*/
int screenWidth = 800;
/* 窗口高度*/
int screenHeight=600;
//-----------------------------------//
int times = 0;
/*初始化游戏 */
void initgame()
{
srand((unsigned)time(NULL));//随机数初始化
setbkcolor(NULL);//背景色
setbkmode(TRANSPARENT);// 设置背景混合模式: TRANSPARENT为透明
//TODO: 游戏初始化位置
}
/*
界面绘图演示案例
*/
void paintDemo()
{
/* 颜色设置:
//设置线的颜色 Blue Green Red 十六进制表示三原色
setlinecolor(0x0000ff);//红色的 线
//-设置填充的颜色
setfillcolor(0x00ff00);//绿色的 填充
//-设置字体的颜色
settextcolor(0xff0000);//蓝色的 字体颜色
*/
/* 画直线的案例
setlinestyle(PS_DASH, 粗细); //PS_DASH 虚线 PS_SOLID 实现 PS_DOT 点线...
line(点1x坐标 ,点1y坐标,点2x坐标 ,点2y坐标); //两点确定一条直线
例如:
setlinestyle(PS_DASH, 3);
line(50 ,50,300 ,200);
*/
/*
绘制矩形
1.空心矩形
rectangle( 顶点x,顶点y,右下点x,右下点的y);
按宽度 和 高度计算为
rectangle( 顶点x,顶点y,顶点x+宽度,顶点y+高度);
rectangle(x,y,x+width,y+height);
2.实心矩形(无边框)
solidrectangle( 顶点x,顶点y,顶点x+宽度,顶点y+高度);
3.实心矩形(有边框)
fillrectangle( 顶点x,顶点y,顶点x+宽度,顶点y+高度);
例如: 绘制一个宽50 高50 的正方形
rectangle( 100,100,100+50,100+50);
fillrectangle( 100,100,100+50,100+50);
*/
/*
绘制圆形
1、空心圆
circle( 圆心x坐标,圆心y坐标,半径);
2、实心圆(无边框)
solidcircle( 圆心x坐标,圆心y坐标,半径);
3、实心圆(有边框)
fillcircle( 圆心x坐标,圆心y坐标,半径);
例如:
circle( 75,75,50);
fillcircle( 75,75,50);
*/
/*
绘制文字
1、设置字体样式
settextstyle(字高, 0, _T("字体名称"));
2、设置文字位置与内容
outtextxy(x,y,L"文字内容");
例如:
settextstyle(46, 0, _T("黑体"));
outtextxy(300,400,L"helloworld你好世界");
*/
/*模板化 动态文字
TCHAR str[100];
_stprintf (str, L"%s的数学成绩是%d", L"小明",61);
outtextxy(300,400,str );
*/
/*贴图
1、声明一个存放图片变量(为了节省图片变量内存空间,通常把其放到全局变量位置)
IMAGE img1 ;
2、加载硬盘的图片到图片变量的内存地址
loadimage(&img1, L".\\图片路径\\图片文件名" ); //.代表项目硬盘存储的位置
3、把内存中的图片显示到界面上。
putimage(x,y,&img1);
*/
/*例如:贴一张图
//loadimage(&img, L".\\images\\jpg\\1\\image0.jpg") ; //图片不透明
IMAGE img1 ;
loadimage(&img1, L".\\images\\1\\image0.png") ;
putimage(10,10,&img1);*/
/*例如:再贴一张图
IMAGE img2;
loadimage(&img2, L".\\images\\2\\image8.png") ;
putimage(10,200,&img2); */
/*例如:连续贴图,要求相同尺寸的图
IMAGE img3;
TCHAR imgPath[100];
int i;
for (i = 0; i <=23; i++)
{
_stprintf (imgPath, L".\\images\\%d\\image%d.png", 3,i);
loadimage(&img3,imgPath ) ;
putimage(100*i,300,&img3);
}*/
}
/*绘制显示游戏界面*/
void paint()
{
BeginBatchDraw();//打开双缓冲
cleardevice();// 清屏
//TODO: 绘图处理位置
paintDemo();
//-----------------------------//
EndBatchDraw();//关闭双缓冲
}
/*游戏运行*/
void run()
{
MOUSEMSG mouse;
while (1) // 游戏主循环 可借助break 结束循环
{
//TODO: 处理鼠标控制位置
if (MouseHit())
{
mouse = GetMouseMsg();
if (mouse.uMsg == WM_LBUTTONDOWN )
{
//exit(0);
int mx=mouse.x;//获得鼠标的x坐标
int my=mouse.y;//获得鼠标的y坐标
}
paint();
}
//TODO: 处理键盘控制位置
if (_kbhit())
{
int k=_getch();
switch (k)
{
case 'A':
case 'a':
//写处理代码
	break; // 左
case 'S':
case 's':
//写处理代码
	break; // 下
case 'D':
case 'd':
//写处理代码
	break; // 右
case 'W':
case 'w':
//写处理代码
	break; // 上
case 72: //上
//写处理代码
	break;
case 80://下
//写处理代码
	break;
case 75://左
//写处理代码
	break;
case 77://右
//写处理代码
	break;
}
paint();
}
//------时间处理 勿动-----------//
Sleep(1);
times++;
if(times%(interval/10)!=0){
continue;
}
times=0;
//TODO: 定时处理位置
//-------------------------------//
paint();// 刷新显示游戏界面
}
}
// 主函数,开启游戏
int main ()
{
initgraph(screenWidth, screenHeight); // TODO: 创建窗口
initgame(); // 初始化游戏
paint();// 刷新显示游戏界面
FlushMouseMsgBuffer(); // 清空鼠标缓冲区
while (_kbhit()) _getch(); // 清空键盘缓冲区
run(); // 开始游戏
closegraph();//关闭图形环境
return 0;
}


----//
paint();// 刷新显示游戏界面
}
}
// 主函数,开启游戏
int main ()
{
initgraph(screenWidth, screenHeight); // TODO: 创建窗口
initgame(); // 初始化游戏
paint();// 刷新显示游戏界面
FlushMouseMsgBuffer(); // 清空鼠标缓冲区
while (_kbhit()) _getch(); // 清空键盘缓冲区
run(); // 开始游戏
closegraph();//关闭图形环境
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值