㈠ c語言:在屏幕上劃定一個矩形區域,用鍵盤方向鍵控制一個方塊移動的方向,類似於貪食蛇,但比貪食蛇F
#include<stdio.h>
#include<bios.h>
#include<conio.h>
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x11b
void main()
{
int l=15,r=35,u=10,d=18,x,y,key;
void frame(int,int,int,int);
void move(int,int *,int *,int *,int *,int *,int *);
clrscr();
x=(l+r)/2;
y=(u+d)/2;
textcolor(YELLOW);
frame(l,r,u,d);
gotoxy(x,y);
cprintf("%c",1);
key=bioskey(0);
while(key!=ESC)
{
move(key,&x,&y,&l,&r,&u,&d);
key=bioskey(0);
}
}
void frame(int l,int r,int u,int d)
{
int i;
for(i=l;i<r+1;i++)
{
gotoxy(i,u);
printf("%c",219);
gotoxy(i,d);
printf("%c",219);
}
for(i=u+1;i<d+1;i++)
{
gotoxy(l,i);
printf("%c",219);
gotoxy(r,i);
printf("%c",219);
}
}
void move(int key,int *x,int *y,int *l,int *r,int *u,int *d)
{
gotoxy(*x,*y);
putchar(32);
if(key==UP)
{
if(*y==*u+1)*y=*d-1;
else (*y)--;
}
if(key==DOWN)
{
if(*y==*d-1)*y=*u+1;
else (*y)++;
}
if(key==LEFT)
{
if(*x==*l+1)*x=*r-1;
else (*x)--;
}
if(key==RIGHT)
{
if(*x==*r-1)*x=*l+1;
else (*x)++;
}
gotoxy(*x,*y);
putchar(1);
}
回復:這個程序是在tc2.0上運行成功的,是c程序,根據錯誤提示,你是把它作為c++來運行的。
補充:在保存文件時擴展名改為.c
㈡ C語言 圖形的移動
第一種方法:
#include<graphics.h>
#include<stdio.h>
void main()
{
int gd=DETECT,gm,i,j,size;
void *buffer;
initgraph(&gd,&gm,"");
registerbgidriver(EGAVGA_driver);
setcolor(BROWN);
circle(100,100,5);
circle(80,100,5);
setfillstyle(1,RED);
bar(72,88,107,95);
setfillstyle(1,GREEN);
bar(80,80,100,88);
size=imagesize(71,79,108,106);
buffer=malloc(size);
getimage(71,79,108,106,buffer);
cleardevice();
putimage(1,1,buffer,COPY_PUT);
do
{
for(j=0;j<=450;j+=90) /*改變90,可以改變下降的大小*/
{
cleardevice();
for(i=0;i<=640;i++)
putimage(i+1,j+1,buffer,COPY_PUT);
cleardevice();
}
}while(!kbhit()); /*按任意鍵退出,不過要等全部走完一遍才會退出*/
closegraph();
}
第二種方法(用背景色覆蓋):
#include<stdio.h>
#include<graphics.h>
void main()
{
int gd=DETECT,gm,i;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
setfillstyle(1,GREEN);
bar(50,230,60,240);
while(!kbhit())
{
for(i=0;i<30;i++)
{
delay(10000);
bar(50+(i+1)*10,230,60+(i+1)*10,240);
setfillstyle(1,0);
bar(50+i*10,230,60+i*10,240);
setfillstyle(1,GREEN);
}
cleardevice();
}
closegraph();
}
㈢ 急求C語言編程, 就是讓一個運動的東西,通過我鍵盤按下上下左右鍵進行移動! 給個例子!
按鍵的同時檢測
如果實在游戲裡面
windows.h,stdio.h
if(getasynckeystate('a')&0x8000)//'a'
c|=4;
if(getasynckeystate('d')&0x8000)//'d'
c|=8;
if(c&4&&c&8)
{printf("hello");
c=0;
}
用了getasynckeystateapi的函數,這個函數的使用方法很有特點
用了get監測按鍵按下,然後c分別和4,8來或運算,然後if再用與運算監測,確實按下了那兩個按鍵之後執行什麼,當然在加&&,可以監測多個按鍵
㈣ 用C語言設計 在屏幕上劃定一個矩形區域,用鍵盤方向鍵控制一個方塊移動的方向
這個問題有點不好回答,因為這個要看你是否有DX或者是OpenGL的庫。如果有的話,一個庫函數就可以實現劃矩形了。再一個庫函數就可以控制矩形移動了。如果你沒有那些庫的話,應該起來就比較有難度了。
㈤ C語言畫一個矩形,然後控制它左右移動
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main(void)
{
int row=5,col=5;
int i,j;
int cmd=0;
unsigned char ch='a';
printf("按q退出");
while(ch!='q'){
system("cls");
for(i=0;i<row;i++){
printf("\n");
}
for(i=0;i<5;i++){
for(j=0;j<col;j++){
printf(" ");
}
printf("**********\n");
}
cmd = getch();
ch = (char)cmd;
if(cmd==224){
cmd = getch();
switch(cmd){
case 72://上
row--;
break;
case 80://下
row++;
break;
case 75://左
col--;
break;
case 77://右
col++;
break;
default:break;
}
}
}
}
㈥ c語言圖形自動移動
control()
{
p->x= rand()%60;
p->y= rand()%20;
gotoxy(p->x,p->y);
printf("%c",2);
Sleep(500);
system("cls");
gotoxy(p->x,p->y);
return control();
}
㈦ 怎樣用c語言實現矩形波的移相(右移30°)
假如你的函數是double rect_wave(double x);
那麼調用的時候用 double y = rect_wave(x - PI / 6.0f);
即可。
其中PI就是π:
double PI = 3.;圓周率π
㈧ c語言 上下左右鍵控制一個木塊的移動
/*這是個貪吃蛇的程序,我想你應該可以從中找到你所需要的東西*/
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戲速度自己調整*/
struct Food
{
int x;/*食物的橫坐標*/
int y;/*食物的縱坐標*/
int yes;/*判斷是否要出現食物的變數*/
}food;/*食物的結構體*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的節數*/
int direction;/*蛇移動方向*/
int life;/* 蛇的生命,0活著,1死亡*/
}snake;
void Init(void);/*圖形驅動*/
void Close(void);/*圖形結束*/
void DrawK(void);/*開始畫面*/
void GameOver(void);/*結束游戲*/
void GamePlay(void);/*玩游戲具體過程*/
void PrScore(void);/*輸出成績*/
/*主函數*/
void main(void)
{
Init();/*圖形驅動*/
DrawK();/*開始畫面*/
GamePlay();/*玩游戲具體過程*/
Close();/*圖形結束*/
}
/*圖形驅動*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/*開始畫面,左上角坐標為(50,40),右下角坐標為(610,460)的圍牆*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/
for(i=50;i<=600;i+=10)/*畫圍牆*/
{
rectangle(i,40,i+10,49); /*上邊*/
rectangle(i,451,i+10,460);/*下邊*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左邊*/
rectangle(601,i,610,i+10);/*右邊*/
}
}
/*玩游戲具體過程*/
void GamePlay(void)
{
randomize();/*隨機數發生器*/
food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/
snake.life=0;/*活著*/
snake.direction=1;/*方嚮往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇頭*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*節數*/
PrScore();/*輸出得分*/
while(1)/*可以重復玩游戲,壓ESC鍵結束*/
{
while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/
{
if(food.yes==1)/*需要出現新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物隨機出現後必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫面上有食物了*/
}
if(food.yes==0)/*畫面上有食物了就要顯示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇的每個環節往前移動,也就是貪吃蛇的關鍵演算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++)/*從蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*顯示失敗*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到牆壁*/
{
GameOver();/*本次游戲結束*/
snake.life=1; /*蛇死*/
}
if(snake.life==1)/*以上兩種判斷以後,如果蛇死就跳出內循環,重新開始*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以後*/
{
setcolor(0);/*把畫面上的食物東西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一節先放在看不見的位置,下次循環就取前一節的位置*/
snake.node++;/*蛇的身體長一節*/
food.yes=1;/*畫面上需要出現新的食物*/
score+=10;
PrScore();/*輸出新得分*/
}
setcolor(4);/*畫出蛇*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最後一節*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循環*/
break;
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*按ESC鍵退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判斷是否往相反的方向移動*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游戲結束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*輸出成績*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*圖形結束*/
void Close(void)
{
getch();
closegraph();
}
㈨ 急求C語言編程, 就是讓一個運動的東西,通過我鍵盤按下上下左右鍵進行移動! 給個例子!謝謝
大部分編程語言中, 屏幕上的每一個點都可以通過坐標來表示,也可以通過編程式控制制在某個點上實現輸出特定字元.
C語言中,如果不是用圖形模式的話,就只能控制在特定位置輸出字元類.如果是用了圖形模式,就可以同時輸出圖形以及字元(實際上所有圖形或字元都是通過畫點陣來構成的).
鍵盤上輸入的每一個鍵都有個鍵值(ASCII碼值),通過人為檢測輸入的鍵值可以判斷出輸入鍵是什麼鍵.如 回車鍵(ENTER)的值是13.同樣,左右上下的鍵也有一個值.
回到LZ的問題:程序輸入時,通過循環檢測輸入的鍵值,如果是左鍵,就把輸出對象的坐標(x,y)改變成(x-Delete,y)
(Delete的值按自己需要而定.如果想讓用戶感覺移動得快點,值就大點.想慢點,就小一點)
並擦除屏幕上原來的輸出,再在新坐標位置上重新輸出對象.就會給用戶視覺上造成物體對象在移動的感覺了.
純屬個人理解,如有錯漏,請多多指正.
㈩ C語言中如何做到通過鍵盤控制一個圖形運動,按上下左右移動,並且能發射炮彈是用easyx畫出的圖形
讓其相應鍵盤消息,在消息相應代碼中,不斷的在屏幕的相應位置上去重繪你的圖形,你的圖形就得到了你的控制了