turboC下键盘控制星号移动

本文分享了在TurboC环境下实现星号移动的方法,通过打印星号并利用gotoxy()控制光标,结合bioskey()函数检测用户输入,实现星号在屏幕上的移动。介绍了first()函数用于初始化星号的中央循环移动,以及如何处理用户改变运动方向的按键输入,文章最后作者谦称自己为小白,期待得到读者的指导。
摘要由CSDN通过智能技术生成

今天尝试做在TC下让一个 星号动起来,基本成功了,所以来分享一下

主要思想就是打印星号,使用gotoxy()函数控制光标位置, 让新的位置打印星号,原来的地方用空格键覆盖。而光标位置 使用bios.h库函数下的bioskey()实现,这里bioskey() 就不解释了,大家不知道的百度吧。

其中first()函数是初始时星号在屏幕中央循环打印,实现直线初始移动。

控制上下左右的函数循环控制条件尤为重要,即不能“跑”的越界,并随时监测用户是否中途按其他键需要改变运动方向,若按下其他键立马返回该键值到show()函数,在show()函数 中判断走哪边。

这里具体解释一下show()函数 中的if(key || bioskey(1)) ,这是一个短路运算,当key有值则不用再输入,直接用上一层函数返回值就好; key = (key == 0 ? bioskey(0) : key);用来区分是第一次改变还是已经改变。好吧,本人口才也不怎么的。

本人小白,学习编程仅一年,不足之处请多多指教。

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

#define TIME 100
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 283
#define SPACE 14624

int show(int key);
void first(int *i, int *j);
int up(int *i, int *j, int key);
int down(int *i, int *j, int key);
int left(int *i, int *j, int key);
int right(int *i, int *j, int key);

void first(int *i, int *j) {
	delay(TIME);
	gotoxy(*j, *i);
	printf(" ");
	gotoxy(++(*j), *i);
	cprintf("*");
} 

int up(int *i, int *j, int key) {
	while(*i != 0 && key == UP) {
		delay(TIME);
		gotoxy(*j, *i);
		cprintf(" ");
		gotoxy(*j, --(*i));
		cprintf("*");
		if(bioskey(1)) 
			key = bioskey(0);
	}
	return key;
}

int down(int *i, int *j, int key) {
	while(*i <26 && key == DOWN) {
		delay(TIME);
		gotoxy(*j, *i);
		cprintf(" ");
		gotoxy(*j, ++(*i));
		cprintf("*");
		if(bioskey(1)) 
			key = bioskey(0);
	}
	return key;
}

int left(int *i, int *j, int key) {
	while(*j > 0 && key == LEFT) {
		delay(TIME);
		gotoxy(*j, *i);
		cprintf(" ");
		gotoxy(--(*j), *i);
		cprintf("*");
		if(bioskey(1)) 
			key = bioskey(0);
	}
	return key;
}

int right(int *i, int *j, int key) {
	while(*j < 80 && key == RIGHT) {
		delay(TIME);
		gotoxy(*j, *i);
		cprintf(" ");
		gotoxy(++(*j), *i);
		cprintf("*");
		if(bioskey(1)) 
			key = bioskey(0);
	}
	return key;
}

int show(int key) {
	int j = 39;
	int i = 10;
	int flag = 1;
	
	clrscr();
	gotoxy(j, i);
	cprintf("*");
	while(j < 80 && j > 0 && i > 0 && i < 26 && key != 283) {
		if(key || bioskey(1)) {
			flag = 0;
			key = (key == 0 ? bioskey(0) : key);
			flag = 0;
			if(key == UP) {
				key = up(&i, &j, key);
			}
			if(key == DOWN) {
				key = down(&i, &j, key);
			}
			if(key == LEFT) {
				key = left(&i, &j, key);
			}
			if(key == RIGHT) {
				key = right(&i, &j, key);
			}
			if(key == ESC)
				break;
		}
		if(flag) {
			first(&i, &j);
		}	
	}
	return key;
}

int main() {
	int key = 0;/*键盘输入的 */ 
	
	key = show(key);
	
	if(key != 283) {
		clrscr();
		gotoxy(25, 13);
		printf("It is a pity,you have died!!!\n");
	}
	else{
		clrscr();
		gotoxy(40, 13);
		printf("exited!\n");
	}
	getch();
	
	return 0;
}

​

 

基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip 个人大四的毕业设计、课程设计、作业、经导师指导并认可通过的高分设计项目,评审平均分达96.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 [资源说明] 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设或者课设、作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96.5分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),供学习参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值