偶然机会遇见代码女神讲课,乘机学习了女神的C语言打砖块游戏

前言

今天我有幸参加了代码女神的一堂编程课。听了这位老师的课,我感触很深,收获颇多。传统教学只注重老师的“讲”,而轻视学生的“说”,这样导致课堂死气沉沉,教学是昏昏欲睡,而在这节课上,互动的成分比较多,学生不再是听众,而是整节课的重要参与者,老师和学生是在相互讨论和交流的基础上完成整节课的,整个课堂气氛活跃,在这种乐学的过程中,学生更容易理解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部分:开始游戏

最后主函数:

如果代码敲完,有报错,请下载图形库插件谢谢,今天分享就到这里结束了哦。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171221A0RXDG00?refer=cp_1026

扫码关注云+社区