C++ 2048 编程 小游戏
#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std; int const ROW = 4;
int const COL = 4;
int game[ROW][COL] = {0};//上下左右
int const UP = 1;
int const DOWN = 2;
int const LEFT = 3;
int const RIGHT = 4; //游戏所处的状态
int const GAME_OVER = 1;
int const GAME_WIN = 2;
int const GAME_CONTINUE = 3; enum GameNum
{ Game_2 = 2, Game_4 = 4, Game_8 = 8, Game_16 = 16, Game_32 = 32, Game_64 = 64, Game_128 = 128, Game_256 = 256, Game_512 = 512, Game_1024 = 1024, Game_2048 = 2048,
}; //打印所得的数组
void Print()
{ system("cls"); cout << "***************** 2048 控 制 台 版 ******************" << endl; cout << "***************** By Tanzf (Intern) ******************" << endl << endl; for (int i = 0; i < ROW; ++i) { cout << "---------------------------------"<< endl; for (int j = 0; j < COL; ++j) { if (game[i][j] == 0) {cout <<"| \t";} else { cout <<"| " << game[i][j] << "\t"; } } cout << "|" << endl; } cout << "---------------------------------"<< endl;
} bool CreateNumber()
{ int x = -1; int y = -1; int times = 0; int maxTimes = ROW * COL;int whitch = rand() % 3; do { x = rand() % ROW; y = rand() % COL; ++times; } while (game[x][y] != 0 && times <= maxTimes); //说明格子已经满了 if(times >= maxTimes) { return false; } else { GameNum num; if(whitch == 0) { num = Game_4; } elsenum = Game_2; game[x][y] = num; } return true;
} void Process(int direction)
{ switch (direction) { case UP: //最上面一行不动 for(int row = 1; row < ROW; ++row) { for(int crow = row; crow >= 1; --crow) { for(int col = 0; col < COL; ++col) { //上一个格子为空 if(game[crow-1][col] == 0) { game[crow-1][col] = game[crow][col]; game[crow][col] = 0; } else { //合并 if(game[crow-1][col] == game[crow][col]) { game[crow - 1][col] *= 2; game[crow][col] = 0; } } } } } break; case DOWN: //最下面一行不动 for(int row = ROW - 2; row >= 0; --row) { for(int crow = row; crow < ROW - 1; ++crow) { for(int col = 0; col < COL; ++col) { //上一个格子为空 if(game[crow + 1][col] == 0) { game[crow + 1][col] = game[crow][col]; game[crow][col] = 0; } else { //合并 if(game[crow + 1][col] == game[crow][col]) { game[crow + 1][col] *= 2; game[crow][col] = 0; } } } } } break; case LEFT: //最左边一列不动 for(int col = 1; col < COL; ++col) { for(int ccol = col; ccol >= 1; --ccol) { for(int row = 0; row < ROW; ++row) { //上一个格子为空 if(game[row][ccol-1] == 0) { game[row][ccol - 1] = game[row][ccol]; game[row][ccol] = 0; } else { //合并 if(game[row][ccol - 1] == game[row][ccol]) { game[row][ccol - 1] *= 2; game[row][ccol] = 0; } } } } } break; case RIGHT: //最右边一列不动 for(int col = COL - 2; col >= 0; --col) { for(int ccol = col; ccol <= COL - 2; ++ccol) { for(int row = 0; row < ROW; ++row) { //上一个格子为空 if(game[row][ccol + 1] == 0) { game[row][ccol + 1] = game[row][ccol]; game[row][ccol] = 0; } else { //合并 if(game[row][ccol + 1] == game[row][ccol]) { game[row][ccol + 1] *= 2; game[row][ccol] = 0; } } } } } break; } } //处理输入输出,返回上下左右
int Input()
{ //读取上下左右四个方向键 int upArrow = 0; int downArrow = 0; int leftArrow = 0; int rightArrow = 0; int direction = 0; while (true) { upArrow = GetAsyncKeyState(VK_UP); downArrow = GetAsyncKeyState(VK_DOWN); leftArrow = GetAsyncKeyState(VK_LEFT); rightArrow = GetAsyncKeyState(VK_RIGHT); if(upArrow) { direction = UP; break; } else if(downArrow) { direction = DOWN; break; } else if(leftArrow) { direction = LEFT; break; } else if(rightArrow) { direction = RIGHT; break; } Sleep(100); } return direction;
} //判断游戏状态
int Judge()
{ //赢得游戏 for(int i = 0; i < ROW; ++i) { for(int j = 0; j < COL; ++j) { if(game[i][j] == 8192) { return GAME_WIN; break; } } } //横向检查 for(int i = 0 ; i < ROW; ++i) { for(int j = 0; j < COL - 1; ++j) { if(!game[i][j] || (game[i][j] == game[i][j+1])) { return GAME_CONTINUE; break; } } } //纵向检查 for(int j = 0; j< COL; ++j) { for(int i = 0; i < ROW -1; ++i) { if(!game[i][j] || (game[i][j] == game[i+1][j])) { return GAME_CONTINUE; break; } } } //不符合上述两种状况,游戏结束 return GAME_OVER; } int main()
{ //设置一个随机数种子 srand((unsigned int)time(0)); CreateNumber(); CreateNumber(); Print(); int direction = 0; int gameState = -1; while(true) { direction = Input(); gameState = Judge(); if(direction && gameState == GAME_CONTINUE) { Process(direction); CreateNumber(); Print(); Sleep(100); } else if(gameState == GAME_WIN) { Print(); cout << "You Win!" << endl; break; } else if(gameState == GAME_OVER) { Print(); cout <<"You lose!" << endl; break; } } return 0;
}
C++ 2048 编程 小游戏相关推荐
- python能做什么游戏-有趣又好玩的9个Python编程小游戏、简直太棒了
打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...
- 搭建2048网页小游戏
本文已发表于本人博客 哔哔哔哔-搭建2048网页小游戏 玩羊了个羊玩腻的话,可以试试2048 前言 仓库地址 https://github.com/gst-be/2048 本站演示站点 https:/ ...
- python小游戏合集-9个Python编程小游戏,有趣又好玩,简直太棒了
前言 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃(笑哭),面临这种困境该怎么办呢?这时候就有一些大牛设计出用游戏来学习编程知识点,所以,这世界 ...
- python小游戏代码200行左右,python编程小游戏代码
大家好,本文将围绕python小游戏代码200行左右展开说明,小游戏程序代码python是一个很多人都想弄明白的事情,想搞清楚python编程小游戏代码需要先了解以下几个事情. 1.python简单小 ...
- python简单游戏程序设计_有趣又好玩的9个Python编程小游戏、简直太棒了
打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...
- 9个Python编程小游戏,有趣又好玩,简直太棒了
前言 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃(笑哭),面临这种困境该怎么办呢?这时候就有一些大牛设计出用游戏来学习编程知识点,所以,这世界 ...
- CSS小游戏2048—简单小游戏编程有手就行~会玩?你会写吗?
简单实现2048小游戏 想实现2048游戏书写代码时可以分为三个步骤 一.HTML部分 先书写HTML把游戏结构搭建出来 <!DOCTYPE html> <html lang=&qu ...
- python编程小游戏-python编程游戏有哪些
python编程游戏有哪些?下面给大家介绍几款由Python开发的游戏: 1.Github上面有个项目Free Python Games,里面集合了不少的Python开发的小游戏,能玩,也适合新手用来 ...
- python编程小游戏-python趣味入门——写几个常玩的游戏
文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...
最新文章
- WPF窗口长时间无人操作鼠标自动隐藏
- Chapter10:观察者模式
- [Erlang-0011][OTP] External Term Format
- vi测试仪维修成功率高吗?_电工电路板检测维修无图电路板的技巧
- oracle10g_vista_,Vista系统 安装Oracle10g 不成功?
- 兼容IE和FF的JS HTMLEncode和HTMLDecode的完整实例[转]
- VS2017 网站打包发布生成的文件中包含.pdb文件,解决办法
- 23万字 前端HTML与CSS学习笔记总结篇(超详细)
- 团队管理22-团队文化
- ASM和AAM的一些代码资源
- OpenWrt路由开启DDNS+端口转发进行外网访问
- re.search与re.findall的区别
- 【虹科】人工智能和工业相机助力瓶盖质量控制
- 关于ubuntu使用鼠标延迟问题
- 带你认识什么是一级指针、二级指针、三级指针
- 你遇到过启动电脑以后系统桌面无法显示吗
- 微信发明者自曝 专利已秘密转让腾讯
- 通过Zerotier访问局域网所有设备
- 百看不如一练,55个Java练手项目(附源码+视频教程),全都在这里了
- 高效解决PPA软件源卡顿出错的问题(ppa.launchpad.net)