前言
今天我有幸参加了代码女神的一堂编程课。听了这位老师的课,我感触很深,收获颇多。传统教学只注重老师的“讲”,而轻视学生的“说”,这样导致课堂死气沉沉,教学是昏昏欲睡,而在这节课上,互动的成分比较多,学生不再是听众,而是整节课的重要参与者,老师和学生是在相互讨论和交流的基础上完成整节课的,整个课堂气氛活跃,在这种乐学的过程中,学生更容易理解C语言编程难点,重点。
听课中代码女神朝气蓬勃、充满激情的教学,还有她善于挖掘新事物,以及她有着先进的教学理念和教学思想,并具有丰富的教学经验和清晰的教学思路
代码女神长什么样子呢?
不存在的,我是来学习知识的,有兴趣可以自己去问哈,我小编可不是这种人!
课程设计
总的来说课程分为六个部分
首先看下游戏模型,玩游戏,了解游戏,极大的调用了我的兴趣
第1部分:设计思考,思考所需变量
过程不过多叙说,直接上代码:
#include
#include
#include
#define ROW 5//砖块共5行
#define COL 20//砖块共20列
int a[ROW][COL] = { 0 };//用一个数组表示上方的砖块,数组元素为0:有方块;为1:没方块
int ballx, bally;//小球的坐标x,y
int boardx, boardy;//木板的坐标x,y
bool starting = false;//判断是否小球正在运动
int addx = 1;
int addy = -1;//小球坐标加的量
bool iscatch = false;//判断是否木板捕捉到小球
第2部分:画上方小砖块矩形
void drawrectangle()
{
//设置小方块的填充颜色
setfillcolor(YELLOW);
//用一个循环将5行20列的所有方块都画出来
for (int j = 0; j
{
for (int i = 0; i
{
if (a[j][i] == 0)
solidrectangle(i * 22, j * 12, i * 22 + 20, j * 12 + 10);
}
}
}
第3部分:初始化,小球和木板的起始位置
void init()
{
//设置木板和小球的坐标
boardx = 220 - 30;
boardy = 600 - 10;
ballx = 220;
bally = 580;
drawrectangle();//画上方小砖块矩形
setfillcolor(LIGHTRED); //设置填充颜色:
solidrectangle(boardx, boardy, boardx + 60, boardy + 10);//初始化木板位置:画出木板的位置
setfillcolor(BLUE);//设置填充颜色:
solidcircle(ballx, bally, 10);//初始化小球,画出小球的初始位置
}
第4部分:小球移动
void drawball()
{
iscatch = false;//木板没有碰到到小球
setfillcolor(BLACK);//设置小球的背景颜色为黑色,跟背景色一致,用于擦除上一次的小球
solidcircle(ballx, bally, 10);//画小球
BeginBatchDraw(); //表示启用批量绘图模式
//如果小球横坐标到了最右边,转向,递减1
if (ballx >= 430)
{
addx = -1;
}
//如果小球横坐标到了最左边,转向,递增1
if (ballx
{
addx = 1;
}
//如果小球纵坐标到了最顶端,转向,
//if (bally
//addy = -1;
//循环遍历每一个砖块,判断与当前小球的位置关系
for (int i = 0; i
{
int flag0 = 0;//标记有没有击中,没有击中用0,击中用1
for (int j = 0; j
{
//小砖块的横纵坐标
int x = j * 22;//数组下标转换为坐标
int y = i * 12;
//判断小球碰到哪个砖块
//这里有砖块且小球圆心坐标小于砖块左上角坐标加30(是砖块的宽度20+小球半径10)
//且大于砖块左上角坐标-10且横坐标为砖的高度10+小球半径且小球横坐标大于砖块
if (a[i][j] == 0 && ballx = x - 10 && bally - y= y+10)
{
addy = -1*addy;//这个时候发生碰撞,小球要返向,纵坐标
addx = -1*addx;//这个时候发生碰撞,小球要返向,横坐标
a[i][j] = 1;//方块元素数组,该元素为1:表示没方块了
flag0 = 1;//标记有没有击中,1表示击中
setfillcolor(BLACK);//击中了,设置填充颜色为黑色:与背景色相同
solidrectangle(x, y, x + 20, y + 10);//画一个矩形(击中区域,黑色的矩形)
break;
}
}
if (flag0)//因为每次只击中一个方块,只要击中了一个之后,我就不需要去在继续去判断了
break;
}
//判断木板是否接到小球 ,判断小球的坐标与木板的坐标范围
if (starting && ballx = boardx - 10 && boardy - bally = 5)
{
iscatch = true;//木板已经接住小球
addy = -1 * addy;//小球y轴反向运动
}
starting = true;
ballx += addx;//更新小球坐标
bally += addy;
setfillcolor(LIGHTBLUE);
solidcircle(ballx, bally, 10);//画小球
FlushBatchDraw();//把之前所有的绘图内容显示出来
Sleep(3);//休眠5毫秒,就是暂停5毫秒,小球慢慢的运动
}
第5部分:木板左右移动
void DispatchCommand()
{
setfillcolor(BLACK);//设置填充色:黑色
//画木板矩形:boardx:木板的左上角x坐标;boardy:木板的左上角y坐标,接下来右下角坐标(x,y)
solidrectangle(boardx, boardy, boardx + 60, boardy + 10);
char c = getch();
//往左移
switch (c)
{
case 'A':
case 'a':
case 75:
//木板捕捉到小球
if (iscatch)
{
setfillcolor(BLACK);
solidcircle(ballx, bally, 10);//画一个球
setfillcolor(LIGHTBLUE);
solidcircle(ballx, bally, 10);//画一个球
}
boardx -= 15;////向左移动时:向左移动2个像素,移动速度
break;
case 'D':
case 'd':
case 77:
//木板捕捉到小球
if (iscatch)
{
setfillcolor(BLACK);
solidcircle(ballx, bally, 10);
setfillcolor(LIGHTBLUE);
solidcircle(ballx, bally, 10);
}
boardx += 15;//向移动时:向右移动2个像素,移动速度
break;
}
//下面限定 木板的移动范围,木板的x坐标最小为0,不能再小了,最大为380
if (boardx
boardx = 0;
if (boardx >= 380)
boardx = 380;
setfillcolor(LIGHTRED);
solidrectangle(boardx, boardy, boardx + 60, boardy + 10);//画木板的矩形
}
第6部分:开始游戏
最后主函数:
如果代码敲完,有报错,请下载图形库插件谢谢,今天分享就到这里结束了哦。
领取专属 10元无门槛券
私享最新 技术干货