C++ 游戏2048
来源:互联网 发布:淘宝网货到付款十字绣 编辑:程序博客网 时间:2024/06/16 10:54
```//// header.h// CPP//// Created by mac on 5/17/16.// Copyright (c) 2016 Fyang. All rights reserved.//#ifndef HEADER_H_#define HEADER_H_#include <iostream>using namespace std;class G2048 {public: G2048(); void display(); bool move_up(); bool move_down(); bool move_left(); bool move_right(); void get_newone();private: int get_score(); bool is_gameover(); void up_swap(size_t, size_t, bool&); void down_swap(size_t, size_t, bool&); void left_swap(size_t, size_t, bool&); void right_swap(size_t, size_t, bool&); void up_add(bool&); void down_add(bool&); void left_add(bool&); void right_add(bool&);private: int game[4][4];};G2048::G2048() { for (size_t i = 0; i < 4; ++i) { for (size_t j = 0; j < 4; ++j) game[i][j] = 0; } get_newone();}void G2048::display() { system("cls"); cout << "Game 2048 :\nUse up, down, left and right\nto move numbers! 'q' to quit!\n\n"; cout << "+-------+-------+-------+-------+\n"; cout << "|" << game[0][0] << "\t|" << game[0][1] << "\t|" << game[0][2] << "\t|" << game[0][3] << "\t|\n"; cout << "+-------+-------+-------+-------+\n"; cout << "|" << game[1][0] << "\t|" << game[1][1] << "\t|" << game[1][2] << "\t|" << game[1][3] << "\t|\n"; cout << "+-------+-------+-------+-------+\n"; cout << "|" << game[2][0] << "\t|" << game[2][1] << "\t|" << game[2][2] << "\t|" << game[2][3] << "\t|\n"; cout << "+-------+-------+-------+-------+\n"; cout << "|" << game[3][0] << "\t|" << game[3][1] << "\t|" << game[3][2] << "\t|" << game[3][3] << "\t|\n"; cout << "+-------+-------+-------+-------+\n"; cout << "\tScore : " << get_score() << endl;}int G2048::get_score(){ int score = 0; for (size_t i = 0; i < 4; ++i) { for (size_t j = 0; j < 4; ++j) { int n = game[i][j]; if (n >= 2048) score += n * 4; else if (n >= 512) score += n * 3; else if (n >= 128) score += n * 2; else score += n; } } return score;}bool G2048::is_gameover() { for (size_t i = 0; i != 3; ++i) for (size_t j = 0; j != 3; ++j) if (game[i][j] == 0) return false; return true;}void G2048::get_newone() { if (is_gameover()) { cout << "Game OVER!"; return; } size_t i = rand() % 4; size_t j = rand() % 4; int n = rand() % 4; if (!game[i][j]) game[i][j] = n ? 2 : 4; else get_newone();}void G2048::up_swap(size_t x, size_t y, bool& moved) { auto n = x; while (n < 4) { ++n; if (game[n][y] != 0 && n < 4) { swap(game[x][y], game[n][y]); moved = true; return; } } }void G2048::up_add(bool& moved) { for (size_t j = 0; j < 4; ++j) { for (size_t i = 0; i < 4; ++i) { if (game[i][j] != 0 && game[i][j] == game[i + 1][j]) { game[i][j] += game[i + 1][j]; game[i + 1][j] = 0; up_swap(i + 1, j, moved); } } }}bool G2048::move_up() { bool moved = false; for (size_t j = 0; j < 4; ++j) { for (size_t i = 0; i < 4; ++i) { if (!game[i][j]) up_swap(i, j, moved); } } up_add(moved); return moved;}void G2048::down_swap(size_t x, size_t y, bool& moved) { auto n = x; while (n < 4) { --n; if (game[n][y] != 0 && n < 4) { swap(game[x][y], game[n][y]); moved = true; return; } }}void G2048::down_add(bool& moved) { for (size_t j = 0; j < 4; ++j) { for (size_t i = 3; i < 4 && i >= 0; --i) { if (game[i][j] != 0 && game[i][j] == game[i - 1][j]) { game[i][j] += game[i - 1][j]; game[i - 1][j] = 0; down_swap(i - 1, j, moved); } } }}bool G2048::move_down() { bool moved = false; for (size_t j = 0; j < 4; ++j) { for (size_t i = 3; i < 4 && i >= 0; --i) { if (!game[i][j]) down_swap(i, j, moved); } } down_add(moved); return moved;}void G2048::left_swap(size_t x, size_t y, bool& moved) { auto n = y; while (n < 4) { ++n; if (game[x][n] != 0 && n < 4) { swap(game[x][y], game[x][n]); moved = true; return; } }}void G2048::left_add(bool& moved) { for (size_t i = 0; i < 4; ++i) { for (size_t j = 0; j < 4; ++j) { if (game[i][j] != 0 && game[i][j] == game[i][j + 1]) { game[i][j] += game[i][j + 1]; game[i][j + 1] = 0; left_swap(i, j + 1, moved); } } }}bool G2048::move_left() { bool moved = false; for (size_t i = 0; i < 4; ++i) { for (size_t j = 0; j < 4; ++j) { if (!game[i][j]) left_swap(i, j, moved); } } left_add(moved); return moved;}void G2048::right_swap(size_t x, size_t y, bool& moved) { auto n = y; while (n < 4) { --n; if (game[x][n] != 0 && n < 4) { swap(game[x][y], game[x][n]); moved = true; return; } }}void G2048::right_add(bool& moved) { for (size_t i = 0; i < 4; ++i) { for (size_t j = 3; j < 4 && j >= 0; --j) { if (game[i][j] != 0 && game[i][j] == game[i][j - 1]) { game[i][j] += game[i][j - 1]; game[i][j - 1] = 0; right_swap(i, j - 1, moved); } } }}bool G2048::move_right() { bool moved = false; for (size_t i = 0; i < 4; ++i) { for (size_t j = 3; j < 4 && j >= 0; --j) { if (!game[i][j]) right_swap(i, j, moved); } } right_add(moved); return moved;}#endif // !
#include "Header.h"#include <conio.h>int main() { G2048 newgame; newgame.display(); int choice; do { choice = _getch(); switch (choice) { case 72: if (newgame.move_up()) newgame.get_newone(); newgame.display(); break; case 80: if (newgame.move_down()) newgame.get_newone(); newgame.display(); break; case 75: if (newgame.move_left()) newgame.get_newone(); newgame.display(); break; case 77: if (newgame.move_right()) newgame.get_newone(); newgame.display(); break; default: break; } } while (choice != 'q'); system("pause"); return 0;}
0 0
- C语言实现2048游戏
- 2048游戏C语言代码
- 2048游戏C语言代码
- 基于C的2048游戏
- 一个C语言写的2048游戏
- 纯C语言开发-2048游戏
- C游戏 推箱子游戏
- C#游戏开发
- C码游戏
- 【C#】扫雷游戏编程
- C的语言游戏
- [C++] Console 翻牌游戏
- C++--三连棋游戏
- 【C++】猜数字游戏
- 多边形游戏(C++)
- c语言拆字游戏
- Linux C 弹球游戏
- wikioi汉诺塔游戏c
- quartz详解1:初步了解quartz
- codeforces #300 C. Tourist's Notes
- 轻量web服务器开发日记04-buffile结构体的实现
- CodeForces 621 B Wet Shark and Bishops
- 一个经典的Spring
- C++ 游戏2048
- 用C#模版匹配识别新教务系统登录验证码
- C++中让人费解的概念
- quartz详解3:quartz数据库集群-锁机制
- 2016百度之星 hdu 5700 分析+优先队列
- 【CodeForces】#621B - Wet Shark and Bishops(思维)
- 小姿势--JS
- 几种session存储方式比较
- quartz详解4:quartz线程管理