gpt4 book ai didi

c - 陷入使用 winBGIm 和 C 进行编程的困境

转载 作者:行者123 更新时间:2023-11-30 15:38:14 27 4
gpt4 key购买 nike

我最近发现了 winBGIm 库,我发现学习编码非常有用,因此我开始创建一些东西来进行练习,但我的程序被困住了。

程序应该显示一个小球和两个接近球本身的矩形,玩家只需按键盘上的按钮即可上下移动球。最初,我在 main 中编写了所有内容以使其更快,但由于这很糟糕,所以我将程序划分为函数。

首先,即使所有东西都在一起,getch函数似乎也不起作用,因为虽然它应该删除kbhit函数的输入缓冲区,但它使球根本不移动,而仅仅kbhit函数起作用,但显然,即使您停止按键,球也会继续上升。我在另一个纯文本程序中使用了相同的过程,并且效果很好,所以我不知道问题出在哪里。

第二个也是最重要的问题是,在将程序拆分为函数之后,它变得静态,因为使图形移动的主循环在第一次迭代结束时停止。只有当我在循环末尾删除cleardevice函数并禁用initwindow函数中的双缓冲时,它才会重新开始工作,但我无法理解这些东西之间的关系。

最后,当我设置新的背景颜色时,如果它不为0(黑色),则窗口保持全黑。

希望有人能帮助我。

最诚挚的问候,贾科莫。

#include <graphics.h>
#include <time.h>
#include <stdio.h>

int rettangoli(int b);
void bird(int x_default, int y_default);

void bird();

int main() {
int a=640;
int b=480;
int x_default=150;
int y_default=400;
int verifica=0;
srand(time(NULL));
initwindow(a, b, "BGI", 0, 0, true, true);
setbkcolor(0);
while(1) {
bird(x_default, y_default);
verifica=rettangoli(b);
if(verifica==1) {
outtextxy(0, 0, "HAI PERSO");
outtextxy(0,20, "PREMERE UN TASTO PER CONTINUARE");
break;
}
delay(50);
while(kbhit()) {
getch();
}
swapbuffers();
cleardevice();
}
delay(350);
getch();
closegraph();
return 0;
}

void bird(int x_default, int y_default) {
static int x_pos=x_default;
static int y_pos=y_default;
if(kbhit()) {
if(y_pos-16>0)
y_pos=y_pos-5;
circle(x_pos, y_pos, 16);
setfillstyle(SOLID_FILL, YELLOW);
floodfill(x_pos, y_pos, 15);
}
else {
while(y_pos<400)
y_pos=y_pos+15;
circle(x_pos, y_pos, 16);
setfillstyle(SOLID_FILL, YELLOW);
floodfill(x_pos, y_pos, 15);
}
return;
}

int rettangoli(int b) {
static int x_rett=615;
int verifica=0;
int contatore;
int altezza;
if(x_rett==615)
altezza=rand()%(b-60)+1;
rectangle(x_rett, 0, x_rett+25, altezza);
rectangle(x_rett, altezza+60, x_rett+25, 480);
setfillstyle(SOLID_FILL, GREEN);
floodfill(x_rett+1, 1, 15);
floodfill(x_rett+1, 479, 15);
for(contatore=0;contatore<altezza && x_rett>100;contatore++) {
if(getpixel(x_rett-1, contatore)!=getbkcolor())
verifica=1;
}
for(contatore=altezza+60;contatore<b && x_rett>100;contatore++) {
if(getpixel(x_rett-1, contatore)!=getbkcolor())
verifica=1;
}
for(contatore=0;contatore<15;contatore++) {
if(getpixel(contatore, altezza)!=getbkcolor())
verifica=1;
}
for(contatore=0;contatore<15;contatore++) {
if(getpixel(contatore, altezza+60)!=getbkcolor())
verifica=1;
}
x_rett=x_rett-5;
printf("%i", x_rett);
return verifica;
}
<小时/>

最佳答案

没关系,我自己解决了这个问题。 Windows 8 x64 和 Codeblocks-EP 之间存在不兼容问题,我认为 winBGIm 和 x64 系统之间普遍存在不兼容问题。

我使用 Vmware Player 和 Windows XP x86 创建了虚拟机,现在一切正常。

关于c - 陷入使用 winBGIm 和 C 进行编程的困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com