项目: 用函数实现反弹球消砖块
目录
- 一、项目描述和最终的成果展示
- 二、封装后的弹跳小球
- 三、显示移动挡板
- 四、反弹小球
- 五、添加砖块并实现打砖块操作
一、项目描述和最终的成果展示
这是在上一次弹跳小项目上进行了一系列的优化和封装。项目: 弹跳的小球
上次没有用函数进行的封装。这次在上次的基础上进行封装和一些功能的优化。
最终效果图如下:
二、封装后的弹跳小球
代码如下:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high = 15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high)printf("-");//输出下边框elseprintf(" ");//输出空格}printf("\n");}
}void updateWithoutInput()//与用户输入无关的更新
{ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(50);
}void updateWithInput()//与用户输入有关的更新
{}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
三、显示移动挡板
代码如下:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右位置void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high = 15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;ridus = 5;position_x = high;position_y = width/2;left = position_y -ridus;right = position_y + ridus;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high+1;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high+1)printf("-");//输出下边框else if ( (i==high)&&(j>=left)&&(j<=right))printf("*");elseprintf(" ");//输出空格}printf("\n");}
}void updateWithoutInput()//与用户输入无关的更新
{ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(50);
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input = getch();if( input == 'a' || input == 'A' ){position_y--;//位置左移left = position_y-ridus;right = position_y+ridus;}if( input == 'd' || input == 'D' ){position_y++;left = position_y - ridus;right = position_y + ridus;}}
}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
四、反弹小球
代码如下:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右位置
int ball_number;//反弹小球的次数void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high = 15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;ridus = 5;position_x = high;position_y = width/2;left = position_y -ridus;right = position_y + ridus;ball_number=0;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high+1;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high+1)printf("-");//输出下边框else if ( (i==high)&&(j>=left)&&(j<=right))printf("*");elseprintf(" ");//输出空格}printf("\n");}printf("反弹小球数:%d\n",ball_number);
}void updateWithoutInput()//与用户输入无关的更新
{if( ball_x == high -1){if( (ball_y>=left) && (ball_y<=right) ){ball_number++;printf("\a");//响铃}else{printf("游戏失败\n");system("pause");exit(0);}}ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(50);
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input = getch();if( input == 'a' || input == 'A' ){position_y--;//位置左移left = position_y-ridus;right = position_y+ridus;}if( input == 'd' || input == 'D' ){position_y++;left = position_y - ridus;right = position_y + ridus;}}
}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
五、添加砖块并实现打砖块操作
代码如下:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右位置
int ball_number;//反弹小球的次数
int block_x1,block_y1;//砖块1的位置
int block_x2,block_y2;//砖块2的位置
int block_x3,block_y3;//砖块3的位置
int score;//消掉砖块的个数void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high = 15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;ridus = 5;position_x = high;position_y = width/2;left = position_y -ridus;right = position_y + ridus;ball_number=0;block_x1 = 0;block_y1 = 1;block_x2 = 0;block_y2 = 2;block_x3 = 0;block_y3 = 3;score=0;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high+1;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high+1)printf("-");//输出下边框else if ( (i==high)&&(j>=left)&&(j<=right))printf("*");else if( (i==block_x1) && (j==block_y1) )printf("A");//输出砖块1else if( (i==block_x2) && (j==block_y2) )printf("B");//输出砖块2else if( (i==block_x3) && (j==block_y3) )printf("C");//输出砖块3elseprintf(" ");//输出空格}printf("\n");}printf("反弹小球数:%d\n",ball_number);printf("消掉的砖块数: %d\n",score);
}void updateWithoutInput()//与用户输入无关的更新
{if( ball_x == high -1){if( (ball_y>=left) && (ball_y<=right) )//被挡板挡住了{ball_number++;printf("\a");//响铃}else{printf("游戏失败\n");system("pause");exit(0);}}if( (ball_x == block_x1) && (ball_y ==block_y1) )//小球击中砖块1{score++;//分数加1block_y1=rand()%width;//产生新的砖块while((block_y1==block_y2) || ( block_y1==block_y3))//当新产生的砖块和其他砖块重合时{block_y1=rand()%width;//产生新的砖块}}if( (ball_x == block_x2) && (ball_y ==block_y2) )//小球击中砖块2{score++;//分数加1block_y2=rand()%width;//产生新的砖块while((block_y2==block_y1) || ( block_y2==block_y3))//当新产生的砖块和其他砖块重合时{block_y2=rand()%width;//产生新的砖块}}if( (ball_x == block_x3) && (ball_y ==block_y3) )//小球击中砖块3{score++;//分数加1block_y3=rand()%width;//产生新的砖块while((block_y3==block_y1) || ( block_y3==block_y2))//当新产生的砖块和其他砖块重合时{block_y3=rand()%width;//产生新的砖块}}ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(66);
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input = getch();if( input == 'a' || input == 'A' ){position_y--;//位置左移left = position_y-ridus;right = position_y+ridus;}if( input == 'd' || input == 'D' ){position_y++;left = position_y - ridus;right = position_y + ridus;}}
}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
项目: 用函数实现反弹球消砖块相关推荐
- 项目: 用数组实现反弹球消砖块
项目:用数组实现反弹球消砖块 一.效果展示: 二.代码如下: 一.效果展示: 二.代码如下: #include<stdio.h> #include<string.h> #inc ...
- C语言实现【小游戏——反弹球消砖块】
目录: 1.目标要求: 2.C语言代码: 3.运行结果: 1.目标要求: 1.击中上方方块'H',分数加1 2.下方控制线没有接到小球时,游戏结束 2.C语言代码: #include<stdio ...
- 【C语言】数组反弹球消砖块
数组反弹球消砖块 一.模板 二.反弹球 三.增加挡板 四.消砖块和计数功能 五.最终成果 一.模板 简单的模板,目前由头文件,全局变量,清屏函数,初始化数据,显示画面,与用户有关的更新,与用户无关的更 ...
- C语言——反弹球消砖块
目录 前言 一.小球代码的重构 函数 二. 实现游戏的边框 三.显示移动挡板 四.反弹小球 五.消除砖块 六.玩家输入 getchar() kbhit() 七.结尾--最后实现的代码 #define ...
- 【C语言】反弹球消砖块游戏
目录 0. 前期准备 1. 打印小球 2. 显示边界 3. 显示挡板 Tip one Tip two 4. 控制挡板
- 项目: 用easyx实现消砖块
目录 一.最终效果展示 二.绘制静态的挡板 三.控制挡板 四.消砖块 五.鼠标交互 一.最终效果展示 效果图如下: 这个项目还是有很多的细节漏洞的.例如: 边界控制这里还是有点问题的. 二.绘制静态的 ...
- VUE+Canvas 实现桌面弹球消砖块小游戏
大家都玩过弹球消砖块游戏,左右键控制最底端的一个小木板平移,接住掉落的小球,将球弹起后消除画面上方的一堆砖块. 那么用VUE+Canvas如何来实现呢?实现思路很简单,首先来拆分一下要画在画布上的内容 ...
- c语言1000内亲密对数,《C语言程序的设计上机指导》项目五函数及其应用.pptx
<C语言程序的设计上机指导>项目五函数及其应用.pptx 项目五 函数及其应用 本章重点 文本 C语言程序结构. 函数定义与函数声明. 函数的调用. 变量的存储属性. 任务一 关于函数应用 ...
- Vue项目—请求函数的封装
Vue项目-请求函数的封装 import axios from 'axios'export const post = (url, data = {}) => {return new Promis ...
最新文章
- python 装饰器 参数-python装饰器的详细解析
- 出错页面webpar的t删除
- php json返回sql,php – 如何从我的特定SQL查询中返回json?
- 能让你的Intellij IDEA 起飞的几个设置(设置背景 字体 快捷键 鼠标悬停提示 提示忽略大小写 取消单行显示)
- windows下JAVA环境变量配置
- 演示Go语言多返回值功能
- linux中split分割文件打开方式,Linux系统下使用split命令分割大文件 (转载)
- js fmt 时间失败,解决方案
- android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...
- eclipse java字体 太小,如何在Eclipse for Java文本编辑器中更改字体大小?
- python qq群_用Python玩转QQ群论坛
- SDK开发技术规范总结
- java openxml word_C#采用OpenXml实现给word文档添加文字
- 2022-2028全球全盘加密软件行业调研及趋势分析报告
- neo4j java 模糊搜索,Neo4j 使用cypher语言进行查询
- 用例图、活动图和顺序图的关系
- vuex入门到实战——实现一个todoList待办清单【学习记录】
- 如何找回删除的文件?挺高的恢复率!
- MarkDown编辑器 - MarkText使用文档
- 日历函数单元 (转)