當前位置:首頁 » 編程語言 » c語言上下左右動的代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言上下左右動的代碼

發布時間: 2023-03-29 12:44:42

㈠ 求c語言笑臉可上下左右的代碼

先在程序定義一個在屏幕中運動的點的結構:

struct move_point

{

int x, y;/*該點的位置,包括x坐標和y坐標*/

int xv, yv;/*該點在x軸、y軸的速度*/

};

運動的原理是,先擦去物體先前的軌跡,讓物體按其速度移動一段距離,再畫出該物體讓我們看到以下代碼:

gotoxy(man.x, man.y);/*把游標移到指定的坐標*/

printf(「「);/*輸出一個空格,把先前的字元擦去*/

然後我們讓物體按其速度運動:

man.x += man.xv;/*水平方向按x軸的速度運動*/

man.y += man.yv;/*垂直方向按y軸的速度運動*/

運動後還要判斷物體是否出界,如果出了界,就令物體反彈,即讓它下一刻的速度等於現在的速度的相反數最後列印出這個笑臉:

gotoxy(man.x, man.y);

printf(「%c\b」, 2); /*輸出ASCII碼值為2的「笑臉」字元*/
望採納,謝謝

㈡ 急求C語言編程, 就是讓一個運動的東西,通過我鍵盤按下上下左右鍵進行移動! 給個例子!謝謝

大部分編程語言中, 屏幕上的每一個點都可以通過坐標來表示,也可以通過編程式控制制在某個點上實現輸出特定字元.
C語言中,如果不是用圖形模式的話,就只能控制在特定位置輸出字元類.如果是用了圖形模式,就可以同時輸出圖形以及字元(實際上所有圖形或字元都是通過畫點陣來構成的).
鍵盤上輸入的每一個鍵都有個鍵值(ASCII碼值),通過人為檢測輸入的鍵值可以判斷出輸入鍵是什麼鍵.如 回車鍵(ENTER)的值是13.同樣,左右上下的鍵也有一個值.
回到LZ的問題:程序輸入時,通過循環檢測輸入的鍵值,如果是左鍵,就把輸出對象的坐標(x,y)改變成(x-Delete,y)
(Delete的值按自己需要而定.如果想讓用戶感覺移動得快點,值就大點.想慢點,就小一點)
並擦除屏幕上原來的輸出,再在新坐標位置上重新輸出對象.就會給用戶視覺上造成物體對象在移動的感覺了.

純屬個人理解,如有錯漏,請多多指正.

㈢ 在C語言中,怎麼編寫用游標鍵控制一個字元上下左右移動。

先用背景色在字元原地列印一次,再移動到要列印的位置,設置為前景色,列印該字元.

㈣ 急求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語言如何使用鍵盤上的上下左右鍵

用bioskey()函數可以實現讀取鍵盤的上下左右鍵


函數原型:int bioskey (int cmd)

說 明:bioskey()的函數原型在bios.h中,即必須包含頭文件#include<bios.h>


讀取方向鍵可以用下面的程序啊!

#include<stdio.h>
#include<bios.h>
#defineKey_Up0x4800//向上方向鍵
#defineKey_Down0x5000//向下方向鍵
#defineKey_Right0x4d00//向右方向鍵
#defineKey_Left0x4b00//向左方向鍵
voidmain()
{
intkey=bioskey(0);
switch(key)
{
caseKey_Up:{printf("向上方向鍵被按下");break;}
caseKey_Down:{printf("向下方向鍵被按下");break;}
caseKey_Left:{printf("向左方向鍵被按下");break;}
caseKey_Right:{printf("向右方向鍵被按下");break;}
}
}

㈥ 如何在VC下實現用鍵盤控制一個字元上下左右等移動

這個其實不難的,不過看你是在VC的哪種模式笑蠢鋒下弄了。如果是在對話框里的話,就要先截取他的消息,,在消息函數PreTranslateMessage里編輯,,如果是在非對話框里的話,就可以使用消息函數WM_KeyDown,上下左右的鍵(游標)值好像是 VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,當然你也可以用'w','s'。。值得說的是在對話框里用KeyDown的話,這個消息會被截取的,所以不能實現。。所以用PreTranslateMessage。。這是大概碰晌方法,其它的,你自己想下應該就能實現。。
呵呵,,詳細的啊。我的代碼沒在這個機子上。。我覺得有大概思路了,然後自己上網查查資料就行了,這樣自己可以更好的理解。。我這台機子也沒裝msdn,,有msdn你就可以查下哪兩個消息函數了。。或者你上網搜下 哪兩個檔唯消息函數也行

㈦ 怎麼用C語言讓一個字元動起來,可以控制上下左右

//簡單編了一個小程序,是這樣不?
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"

intmain()
{

charc;
intx,y,i,j;
x=0;
y=0;
printf("*");
while(1)
{
if((c=getch())<0)c=getch();

switch(c)
{
case72:
if(y>0)y=y-1;
break;
case75:
if(x>0)x=x-1;
break;
case77:
if(x<79)x=x+1;
break;
case80:
if(y<24)y=y+1;
break;
default:
break;
}
system("cls");
for(j=0;j<y;j++)
printf(" ");
for(i=0;i<x;i++)
printf("");
printf("*");
//printf("%d,%d",x,y);
}
}

㈧ C語言 如何實現窗口的上下移動 左右移動

這個很復雜的 你要重新寫好多函數 包括像printf 什麼的
因為有可能讓他列印一個字元串,但是有很多字元是沒在屏幕裡面的
而系統是沒有這些方便的函數的

工作量太大,你估計不會去寫得

㈨ 能不能盡可能詳細的幫我注釋一下這個C語言程序呢通過上下左右來移動游標的程序!!拜託啦, 我在TC下運行的.

#include <stdio.h>
#include <bios.h>
#include <conio.h>
#define ESC 0x011b//這些是這幾個鍵的鍵值
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00

typedef struct
{
int x;
int y;
}point;

DrawMan(int x, int y)
{
gotoxy(x, y);//移動到相應的位置
printf("%c\b", 2);//畫笑臉
}

DrawSpace(int x, int y)
{
gotoxy(x, y);
printf(" ");
}

int main()
{
point man = {35, 15};
int key = 0;
clrscr();
DrawMan(man.x, man.y);

while (key != ESC)
{
while (bioskey(1) == 0);//bioskey(1)查詢是否按下一個鍵,若源型或按下一個鍵則返回鍵值,否則返回雹伍0。
key = bioskey(0);

switch (key)//篩選鍵值操作
{
case UP:
DrawSpace(man.x, man.y);
--man.y;//向上對應的坐標是y坐標減一,下面的類似就不再租手說了
DrawMan(man.x, man.y);
break;
case DOWN:
DrawSpace(man.x, man.y);
++man.y;
DrawMan(man.x, man.y);
break;
case LEFT:
DrawSpace(man.x, man.y);
--man.x;
DrawMan(man.x, man.y);
break;
case RIGHT:
DrawSpace(man.x, man.y);
++man.x;
DrawMan(man.x, man.y);
break;
defualt:
break;
}
}

return 0;
}

㈩ 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();
}