Ⅰ c語言中怎麼用鍵盤控制界面的物體移動
這里有個用C語言控制屏幕上小飛機運動的代碼,供參考:
#include<stdio.h>
#include<Windows.h>
#include<time.h>
#include"stdio.h"
#include
<conio.h>
#define
N
35
int
scr[22][N]={0},pl=9,width=24,speed=3,density=30;
int
score=0,death=0;
void
print(int
a[][N])
{
system("cls");
int
i,j;
for(i=0;i<22;i++)
{
a[i][width-1]=4;
for(j=0;j<width;j++)
{
if(a[i][j]==0)
printf("
");
if(a[i][j]==1)
printf("\5");
if(a[i][j]==2)
printf(".");
if(a[i][j]==3)
printf("\3");
if(a[i][j]==4)
printf("|");
if(i==0
&&
j==width-1)
printf("score:%d",score);
if(i==1
&&
j==width-1)
printf("death:%d",death);
if(i==2
&&
j==width-1)
printf("setting:ESC");
}
printf("\n");
}
}
void
movebul(int
a[][N])
{
int
i,j=0;
for(i=0;i<22;i++)
{
if(i==0
&&
a[i][j]==2)a[i][j]==0;
if(a[i][j]==2)
{
if(a[i-1][j]==3)
score+=10,printf("\7");
a[i][j]=0,a[i-1][j]=2;
}
}
}
void
movepla(int
a[][N])
{
int
i,j;
for(i=21;i>=0;i--)
for(j=0;j<width;j++)
{
if(i==21&&a[i][j]==3)
a[i][j]=0;
if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;
}
if(a[20][pl]==3&&a[21][pl]==1)death++;
}
void
setting(void)
{
int
sw=0,i,j;
system("cls");
do
{
sw=0;
printf("\n游戲界面的大小:1.大2.小>>");
switch(getchar())
{
case'1':width=34;break;
case'2':width=24;;break;
default:printf("\n錯誤,請重新選擇...\n");
sw=1;
}
}while(sw);
do
{
sw=0;
printf("\n請選擇敵機密度:1.大2.中3.小>>");
switch(getchar())
{
case'0':density=10;break;
case'1':density=20;break;
case'2':density=30;break;
case'3':density=40;break;
default:printf("\n錯誤,請重新選擇...\n");
sw=1;
}
}while(sw);
do
{
sw=0;
printf("\n敵機的飛行速度:1.快2.中3.慢>>");
switch(getchar())
{
case'1':speed=2;break;
case'2':speed=3;break;
case'3':speed=4;break;
default:printf("\n錯誤,請重新選擇...\n");
sw=1;
}
}while(sw);
for(i=0;i<22;i++)
for(j=0;j<45;j++)
scr[i][j]=0;
scr[21][pl=9]=1;
printf("\n按任意鍵保存...");
getchar();
}
void
menu(void)
{
printf("說明:按AD控制我機左右飛行,W發射子彈\n設置:請按Esc\n開始游戲:任意鍵");
if(getchar()==27)
setting();
}
void
main()
{
menu();
int
i=0,j=0;
scr[21][pl]=1;
scr[0][5]=3;
while(1)
{
if(kbhit())
switch(getch())
{
case'a':
case'A':if(pl>0)
scr[21][pl]=0,scr[21][--pl]=1;break;
case'd':
case'D':if(pl<width-2)
scr[21][pl]=0,scr[21][++pl]=1;break;
case'w':
case'W':scr[20][pl]=2;break;
case
27:setting();break;
}
if(++j%density==0)
{
j=0;
srand(time(NULL));
scr[0][rand()%width]=3;
}
if(++i%speed==0)
movepla(scr);
movebul(scr);
print(scr);
if(i==30000)
i=0;
}
}
Ⅱ 如何實現C語言中用鍵盤控制游標移動
按方向鍵可以移動游標位置的。
Ⅲ c語言用宏定義 移位操作,大神留步!!
上面的程序未顯示error.
用類似##操作符運行c a(n) : ##a(n)想要達到什麼效果? 它是單目操作符:
define ##1(n) (n<<=1)
define ##2(n) (n<<=2)
define ##_2(n) (n>>=2)
#include<stdio.h>
#define a(c,n) (n>=0?(c<<=n):(c>>=(-n)))
int main(void){
int b,c,i;
for(i=-2;i<3;i++)
{
b=c=15;
a(c,i);
printf("%d<<%d=%d ",b,i,c);
}
return 0;
}
Ⅳ C語言編程 鍵盤移動麻煩,大牛們是怎樣打字的
速度流的話,用vim,絕對管用
或者比較好的編輯器可以自定義快捷鍵的,定義為習慣的按鍵,就可以避免這個問題
Ⅳ 急求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語言中怎麼用鍵盤控制界面的物體移動
這里有個用C語言控制屏幕上小飛機運動的代碼,供參考:
#include<stdio.h>
#include<Windows.h>
#include<time.h>
#include"stdio.h"
#include <conio.h>
#define N 35
int scr[22][N]={0},pl=9,width=24,speed=3,density=30;
int score=0,death=0;
void print(int a[][N])
{
system("cls");
int i,j;
for(i=0;i<22;i++)
{
a[i][width-1]=4;
for(j=0;j<width;j++)
{
if(a[i][j]==0) printf(" ");
if(a[i][j]==1) printf("\5");
if(a[i][j]==2) printf(".");
if(a[i][j]==3) printf("\3");
if(a[i][j]==4) printf("|");
if(i==0 && j==width-1) printf("score:%d",score);
if(i==1 && j==width-1) printf("death:%d",death);
if(i==2 && j==width-1) printf("setting:ESC");
}
printf("\n");
}
}
void movebul(int a[][N])
{
int i,j=0;
for(i=0;i<22;i++)
{
if(i==0 && a[i][j]==2)a[i][j]==0;
if(a[i][j]==2)
{
if(a[i-1][j]==3) score+=10,printf("\7");
a[i][j]=0,a[i-1][j]=2;
}
}
}
void movepla(int a[][N])
{
int i,j;
for(i=21;i>=0;i--)
for(j=0;j<width;j++)
{
if(i==21&&a[i][j]==3) a[i][j]=0;
if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;
}
if(a[20][pl]==3&&a[21][pl]==1)death++;
}
void setting(void)
{
int sw=0,i,j;
system("cls");
do
{
sw=0;
printf("\n游戲界面的大小:1.大2.小>>");
switch(getchar())
{
case'1':width=34;break;
case'2':width=24;;break;
default:printf("\n錯誤,請重新選擇...\n");
sw=1;
}
}while(sw);
do
{
sw=0;
printf("\n請選擇敵機密度:1.大2.中3.小>>");
switch(getchar())
{
case'0':density=10;break;
case'1':density=20;break;
case'2':density=30;break;
case'3':density=40;break;
default:printf("\n錯誤,請重新選擇...\n");
sw=1;
}
}while(sw);
do
{
sw=0;
printf("\n敵機的飛行速度:1.快2.中3.慢>>");
switch(getchar())
{
case'1':speed=2;break;
case'2':speed=3;break;
case'3':speed=4;break;
default:printf("\n錯誤,請重新選擇...\n");
sw=1;
}
}while(sw);
for(i=0;i<22;i++)
for(j=0;j<45;j++)
scr[i][j]=0;
scr[21][pl=9]=1;
printf("\n按任意鍵保存...");
getchar();
}
void menu(void)
{
printf("說明:按AD控制我機左右飛行,W發射子彈\n設置:請按Esc\n開始游戲:任意鍵");
if(getchar()==27) setting();
}
void main()
{
menu();
int i=0,j=0;
scr[21][pl]=1;
scr[0][5]=3;
while(1)
{
if(kbhit())
switch(getch())
{
case'a':
case'A':if(pl>0)
scr[21][pl]=0,scr[21][--pl]=1;break;
case'd':
case'D':if(pl<width-2)
scr[21][pl]=0,scr[21][++pl]=1;break;
case'w':
case'W':scr[20][pl]=2;break;
case 27:setting();break;
}
if(++j%density==0)
{
j=0;
srand(time(NULL));
scr[0][rand()%width]=3;
}
if(++i%speed==0) movepla(scr);
movebul(scr);
print(scr);
if(i==30000) i=0;
}
}
Ⅶ 急求C語言編程, 就是讓一個運動的東西,通過我鍵盤按下上下左右鍵進行移動! 給個例子!謝謝
大部分編程語言中, 屏幕上的每一個點都可以通過坐標來表示,也可以通過編程式控制制在某個點上實現輸出特定字元.
C語言中,如果不是用圖形模式的話,就只能控制在特定位置輸出字元類.如果是用了圖形模式,就可以同時輸出圖形以及字元(實際上所有圖形或字元都是通過畫點陣來構成的).
鍵盤上輸入的每一個鍵都有個鍵值(ASCII碼值),通過人為檢測輸入的鍵值可以判斷出輸入鍵是什麼鍵.如 回車鍵(ENTER)的值是13.同樣,左右上下的鍵也有一個值.
回到LZ的問題:程序輸入時,通過循環檢測輸入的鍵值,如果是左鍵,就把輸出對象的坐標(x,y)改變成(x-Delete,y)
(Delete的值按自己需要而定.如果想讓用戶感覺移動得快點,值就大點.想慢點,就小一點)
並擦除屏幕上原來的輸出,再在新坐標位置上重新輸出對象.就會給用戶視覺上造成物體對象在移動的感覺了.
純屬個人理解,如有錯漏,請多多指正.
Ⅷ C語言中的宏定義怎麼用
C語言中的宏定義用法分為兩種。
1、不帶參數的宏定義比較簡單,就是用一個指定的標識符來代表一個字元串。它的一般形式為「#define 標識符 字元串」,例如#define E 2.718281828459。這種方法使用戶能以一個簡單的名字代替一個長的字元串。
2、帶參數的宏定義不是僅僅進行簡單的字元串替換,還要進行參數替換。其定義的一般形式為;「#define 標識符(宏名)(參數表) 字元串」,字元串中包含在括弧中所指定的參數。例如#define S(a,b) a*b area=S(3. 2)。
(8)c語言宏定義鍵盤移動擴展閱讀:
宏定義只佔編譯時間,函數調用則佔用運行時間(分配單元,保存現場,值傳遞,返回),每次執行都要載入,所以執行相對宏定義會較慢。
使用宏定義次數多時,宏定義展開後源程序很長,因為每展開一次都使程序增長,但是執行起來比較快一點(這也不是絕對的,當有很多宏定義展開,目標文件很大,執行的時候運行時系統換頁頻繁,效率就會低下)。而函數調用不使源程序變長。