【c语言】小游戏程序——弹跳小球

现在说一下其中一个最简单的小程序:弹跳小球———————————————LINE————————————————首先我们知道,在窗口的坐标系原点是在窗口左上角的,如图所示然后我们如果想在这个坐标系里面的某个点上画出一个小球,那么它的坐标系应该就是这样的转换到c语言的思维的话:X0既是打印…

大家好,又见面了,我是你们的朋友全栈君。

现在说一下其中一个最简单的小程序:弹跳小球

———————————————LINE————————————————

首先我们知道,在窗口的坐标系原点是在窗口左上角的,如图所示

                      【c语言】小游戏程序——弹跳小球

然后我们如果想在这个坐标系里面的某个点上画出一个小球,那么它的坐标系应该就是这样的

                      【c语言】小游戏程序——弹跳小球

转换到c语言的思维的话:X0既是打印出X0个空格,Y0既是打印出Y0个“\n”!!!!

                                                SO

                                                                                 代码如下


#include <stdio.h>
#include <stdlib.h>

int main()
{

	int i,j;
    int x = 30;
    int y = 10;

		system("cls");
	  
		for(j=0;j<y;j++)
		{
			printf("\n");
		}

		for(i=0;i<x;i++)
		{
			printf(" ");
		}
			printf("O\n");

	return 0;
}

​

                                                                      ↓↓↓↓编译好的效果就像这样↓↓↓↓

                        【c语言】小游戏程序——弹跳小球

                                                       如果想让小球往上(往下)运动要怎么办呢?

我们看前面的那个图就可以知道,只要X轴保持不变,Y轴往上做减法就可以完成,所以

#include <stdio.h>
#include <stdlib.h>

int main()
{

	int i,j;
    int x = 30;
    int y = 10;

	for(int z=10;z>=y;y--)
	{
		system("cls");
	  
		for(j=0;j<y;j++)
		{
			printf("\n");
		}

		for(i=0;i<x;i++)
		{
			printf(" ");
		}
			printf("O\n");
	}

	return 0;
}

从运行效果中可以知道,小球会一直往上运动,没有停止

                  【c语言】小游戏程序——弹跳小球

                                           为什么呢?

                                               因为我们没有设定边界,所以球碰到边缘也不会停止

                                                   所以我们在程序中加入两个变量:顶部和底部

int TOP = 1;
int Bottom = 10;

 并且规定当小球达到窗口的顶部和底部时做反方向运动

但在做反方向运动时,需要有个和正常运动相反的速度,所以加入一个变量:速度

int speed = 1;

在正常运动时,speed变量为正数,当触碰边缘时,speed变量为负数,使得小球反方向运动

int speed =1;

if(y > Bottom || y < TOP)
		{
			speed = -speed;
		}

		y = y - speed;

                                                                 根据效果图可知,小球在做上下来回跳动

                    【c语言】小游戏程序——弹跳小球

       由此可知,如果想上下左右跳动,只需在Y轴上也增加左右边界,使得触碰到左右边界的时候小球做相反方向运动,即可完成小程序的初步效果,实现出小球来回跳动的效果。

                                               源码如下

#include <stdio.h>
#include <stdlib.h>

int main()
{

	int i,j;
    int x = 30;
    int y = 10;

	int TOP = 1;
	int Bottom = 10;

	int Left = 0;
	int Right = 50;

	int speed_x = 1;
	int speed_y = 1;

	while(1)
	{
		
		if(y>Bottom || y<TOP)
		{
			speed_y = -speed_y;
		}

		if(x<Left || x>Right)
		{
			speed_x = -speed_x;
		}

		x = x - speed_x;
		y = y - speed_y;

		system("cls");
	  
		for(j=0;j<y;j++)
		{
			printf("\n");
		}

		for(i=0;i<x;i++)
		{
			printf(" ");
		}
			printf("O\n");
	}

	return 0;
}

PS:如果觉得小球跳动速度太快,可以添加一些延时代码令小球速度减缓,具体可自行百度

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124622.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何成为一名优秀的工程师(语义篇)

    如何成为一名优秀的工程师(语义篇)

    2021年11月6日
    31
  • CSS弹性盒子布局flex

    CSS弹性盒子布局flexflex 布局 flex 布局是继标准流布局 浮动布局 定位布局后的第四种布局方式 这种方式可以非常优雅的实现子元素居中或均匀分布 甚至可以随着窗口缩放自动适应 flex 布局在浏览器中存在一定的兼容性 具体参考 https developer mozilla org zh CN docs Web CSS CSS Flexible Box Layout Using CSS flexible box

    2025年10月29日
    3
  • BeanUtils.populate 源码分析

    BeanUtils.populate 源码分析BeanUtilsBean propertyUtilsBean  MethodgetWriteMethod(Classclazz,PropertyDescriptordescriptor){    return(MethodUtils.getAccessibleMethod(clazz,descriptor.getWriteMethod())); …

    2022年7月26日
    11
  • 什么是DDR3_DDR3 SDRAM

    什么是DDR3_DDR3 SDRAMODT是什么鬼?为什么要用ODT?在很多关于DDR3的博文和介绍中都没有将清楚。在查阅了很多资料并仔细阅读DDR3的官方标准(JESD79-3A)之后,总算有点了头绪,下面来整理整理。1、首先ODT是什么?ODT(On-DieTermination),是从DDR2SDRAM时代开始新增的功能。其允许用户通过读写MR1寄存器,来控制DDR3SDRAM中内部的终端电阻的连接或者断开。在DDR3…

    2025年10月16日
    2
  • 漏洞挖掘丨敏感信息泄露+IDOR+密码确认绕过=账户劫持

    漏洞挖掘丨敏感信息泄露+IDOR+密码确认绕过=账户劫持获得账户auth_token目标网站是一个工作招聘门户网站,测试保密原因暂且称其为redacted.com。一开始,我登录以应聘者身份去测试CSRF或某些存储型XSS,但没什么发现。接下来,我就想到了越权测试(IDOR),为此,我又创建了另外一个账号,两个账号一起可以测试如注册、登录、忘记密码等功能点的越权可能。创建账号前我开启了流量抓包想看看具体服务端的响应,注册开始时,网站会跳出一个提示,…

    2022年6月10日
    31
  • golang下文件锁的使用[通俗易懂]

    golang下文件锁的使用[通俗易懂]前言题目是golang下文件锁的使用,但本文的目的其实是通过golang下的文件锁的使用方法,来一窥文件锁背后的机制。为什么需要文件锁只有多线程/多进程这种并发场景下读写文件,才需要加锁,场景1-读写并发读写并发场景下,如果不加锁,就会出现读到脏数据的情况。想象一下,读文件的进程,读到第500字节,有其它进程以覆盖写的方式向文件中写入1000字节,那读进程读到的后500字节就是脏数据。场景2-写写并发写写并发场景下,如果不加锁,假设A进程先写0-1000字节,B进程写0-900字节,以此类

    2022年6月28日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号