首页 > 代码库 > [Practice]山寨2048之Terminal版
[Practice]山寨2048之Terminal版
吹水:
今日得闲没野做,就捻着搵点野料下。
我玩过2048,觉得规则挺简单的,应该挺好入手的。
毕竟,也是开源的。网上也存在很多教材或自定义,神马的。
于是,我本着尝试的态度,不看教程,能否山寨一个出来。
分析:去官网http://gabrielecirulli.github.io/2048/玩上几盘,一步一步地摸索其规则。
最后,经过一个下午和傍晚的时间,我实现了大致的功能,也不清楚是否和原版100%相同。
而且程序效率也不高,在此就不详解我自己的做法了。有兴趣的人,可自行参照网上的教程。
此帖,自娱自乐,目的只有一个:锻炼自己的编码能力和分析步骤。
备注:控制台版,使用C++语言
Grid.h
/*************************************************************** *程序名称:2048 *内容摘要:练习 *其它说明:无 *当前版本:V1.0 *作 者:tbz *完成日期:2014年5月8日 ***************************************************************/ #ifndef _GIRD_H_ #define _GIRD_H_ //实现4X4的方格,并提供移动、检测输赢等操作 class Grid { public: explicit Grid(); void print(); void move(char action); bool isWon(); bool isLost(); private: int position[4][4]; //这四个函数原理一致 bool moveLeft(); bool moveRight(); bool moveUp(); bool moveDown(); //辅助函数 bool isExistEqual(int row, int column); void generateEntry(int count); int& at(int row, int column); int random(int min, int max); }; #endif
Grid.cpp
/*************************************************************** *程序名称:2048 *内容摘要:练习 *其它说明:无 *当前版本:V1.0 *作 者:tbz *完成日期:2014年5月8日 ***************************************************************/ #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> #include "Grid.h" using namespace std; //从1开始计数 int& Grid::at(int row, int column) { return position[row-1][column-1]; } //生成某范围的随机数 int Grid::random(int min, int max) { return ((rand() % (max-min+1)) + min); } //建立4X4表格,并初始化 Grid::Grid() { srand(time(0)); for (int row = 1; row <= 4; ++row) for (int column = 1; column <= 4; ++column) { at(row, column) = 0; } //放置2个数 generateEntry(2); } //生成几个数,不重复 void Grid::generateEntry(int count) { int x = 0, y = 0, value = http://www.mamicode.com/0;>
main.cpp
/*************************************************************** *程序名称:2048 *内容摘要:练习 *其它说明:无 *当前版本:V1.0 *作 者:tbz *完成日期:2014年5月8日 ***************************************************************/ #include <cstdlib> #include <conio.h> #include "Grid.h" #include <iostream> using namespace std; bool isNeed(char c) { switch (c) { case ‘a‘:case ‘s‘:case ‘d‘:case ‘w‘: case ‘A‘:case ‘S‘:case ‘D‘:case ‘W‘: return true; } return false; } int main(int argc, char const *argv[]) { Grid game; //game flow control while (true) { system("cls"); game.print(); if (game.isWon()) { cout << endl << "Congratulation! You won!" << endl; cout << "Press any key to exit." << endl; getch(); return 0; } if (game.isLost()) break; //Promt cout << endl; cout << "A -> Left, D -> Right, W -> Up, S -> Down. (K -> Exit)" << endl; char input = getch(); if (input == ‘k‘) return 0; if (!isNeed(input)) continue; game.move(input); } cout << "Sorry! You lose." << endl; getch(); return 0; }总结:
分析很重要。
每开发一个独立功能,就测试一下,可减少后期调试的痛苦。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。