c语言如何使用键盘上的上下左右键

Python015

c语言如何使用键盘上的上下左右键,第1张

用bioskey()函数可以实现读取键盘的上下左右键

函数原型:int bioskey (int cmd)

说       明:bioskey()的函数原型在bios.h中,即必须包含头文件#include<bios.h>

读取方向键可以用下面的程序啊! 

#include<stdio.h>

#include<bios.h>

#define Key_Up 0x4800    // 向上方向键 

#define Key_Down 0x5000  // 向下方向键

#define Key_Right 0x4d00  // 向右方向键

#define Key_Left 0x4b00   // 向左方向键

void main()

{

    int key=bioskey(0) 

    switch(key) 

    {

     case Key_Up : {printf(" 向上方向键被按下") break}

     case Key_Down : {printf(" 向下方向键被按下") break}

     case Key_Left : {printf(" 向左方向键被按下") break}

     case Key_Right : {printf(" 向右方向键被按下") break} 

    }

}

// 就是类似打飞机的程序呗,直接复制以下源码在VC6.0 中编译通过!

#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=0i<22i++)

  {

    a[i][width-1]=4

    for(j=0j<widthj++)

    {

      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=0i<22i++)

  {

    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=21i>=0i--)

    for(j=0j<widthj++)

    { 

      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=34break

      case'2':width=24break 

      default:printf("\n错误,请重新选择...\n") 

      sw=1 

    }

  }while(sw)

  do

  { 

    sw=0 

    printf("\n请选择敌机密度:1.大2.中3.小>>") 

    switch(getchar())

    { 

      case'0':density=10break

      case'1':density=20break

      case'2':density=30break

      case'3':density=40break 

      default:printf("\n错误,请重新选择...\n") 

      sw=1

    } 

  }while(sw)

  do

  { 

    sw=0 

    printf("\n敌机的飞行速度:1.快2.中3.慢>>")

    switch(getchar())

    { 

      case'1':speed=2break

      case'2':speed=3break

      case'3':speed=4break 

      default:printf("\n错误,请重新选择...\n") 

      sw=1

    } 

  }while(sw) 

  for(i=0i<22i++) 

    for(j=0j<45j++) 

      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]=1break

      case'd':

      case'D':if(pl<width-2)

      scr[21][pl]=0,scr[21][++pl]=1break

      case'w':

      case'W':scr[20][pl]=2break

      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

  }

}