1. 程式人生 > >2048(已更新,所有bug均已修復)【更美觀的外形】

2048(已更新,所有bug均已修復)【更美觀的外形】

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>
int i,j,M[100][100],ans;
void Disgm(){
    for (i=0;i<=5;i++){
        M[i][0]=1;
        M[0][i]=1;
        M[i][5]=1;
        M[5][i]=1;
    }
}
int pd(){
    for (i=1;i<=4;i++)
        for (j=1;j<=4;j++)
            if (!M[i][j]) return 1;
    return 0;
}
void DisP(){
    int tx=rand()%4+1; int ty=rand()%4+1;
    int num=rand()%2+1; num*=2;
    if (pd()){
        while (M[tx][ty]) {
            tx=rand()%4+1;
            ty=rand()%4+1;
        }
        M[tx][ty]=num;
    }
}
void up(){
    for (i=1;i<=4;i++)
        for (j=1;j<=4;j++)
            if (M[i][j]){
                int u=i,v=j;
                while (M[u][v]==M[u-1][v] || M[u-1][v]==0){
                    if (M[u-1][v]==0) {
                        M[u-1][v]=M[u][v];
                        M[u][v]=0;
                    }
                    else if (M[u-1][v]==M[u][v]) {
                        M[u-1][v]*=2;
                        M[u][v]=0;
                        ans+=M[u-1][v];
                    }
                    u--;
                }
            }
}
void down(){
    for (i=1;i<=4;i++)
        for (j=1;j<=4;j++)
            if (M[i][j]){
                int u=i,v=j;
                while (M[u][v]==M[u+1][v] || M[u+1][v]==0){
                    if (M[u+1][v]==0) {
                        M[u+1][v]=M[u][v];
                        M[u][v]=0;
                    }
                    else if (M[u+1][v]==M[u][v]) {
                        M[u+1][v]*=2;
                        M[u][v]=0;
                        ans+=M[u+1][v];
                    }
                    u++;
                }
            }
}
void left(){
    for (i=1;i<=4;i++)
        for (j=1;j<=4;j++)
            if (M[i][j]){
                int u=i,v=j;
                while (M[u][v]==M[u][v-1] || M[u][v-1]==0){
                    if (M[u][v-1]==0) {
                        M[u][v-1]=M[u][v];
                        M[u][v]=0;
                    }
                    else if (M[u][v-1]==M[u][v]) {
                        M[u][v-1]*=2;
                        M[u][v]=0;
                        ans+=M[u][v-1];
                    }
                    v--;
                }
            }
}
void right(){
    for (i=1;i<=4;i++)
        for (j=1;j<=4;j++)
            if (M[i][j]){
                int u=i,v=j;
                while (M[u][v]==M[u][v+1] || M[u][v+1]==0){
                    if (M[u][v+1]==0) {
                        M[u][v+1]=M[u][v];
                        M[u][v]=0;
                    }
                    else if (M[u][v+1]==M[u][v]) {
                        M[u][v+1]*=2;
                        M[u][v]=0;
                        ans+=M[u][v+1];
                    }
                    v++;
                }
            }
}
void Play(){
    
    char key;
    do {
	key=getch();
    }while (key!='w' && key!='s' && key!='a' && key!='d');
    if (key=='w') up();
    if (key=='s') down();
    if (key=='a') left();
    if (key=='d') right();
    DisP();
}
void Print(){
    for (i=1;i<=26;i++) printf("#");
	puts("");
    for (i=1;i<=4;i++,printf("  #"),puts("")){
        printf("#  ");
		for (j=1;j<=4;j++)
            printf("%5d",M[i][j]);
    }
    for (i=1;i<=26;i++) printf("#");
    puts("");
    printf("score:%d\n",ans);
}
int GameOver(){
    for (i=1;i<=4;i++)
        for (j=1;j<=4;j++)
            if (M[i][j]==M[i-1][j] || M[i][j]==M[i+1][j] || M[i][j]==M[i][j-1] || M[i][j]==M[i][j+1]) return 0;
    return 1;
}
int main(){
    puts("遊戲名稱:2048");
    getch(); puts("");
    puts("遊戲目標:略");
    getch(); puts("");
    puts("遊戲規則:略");
    getch(); puts("");
    puts("By steven_cnyali");
    getch(); puts("");
    system("cls");
    for (i=3;i>=1;i--) {
        printf("遊戲即將開始...(%d)",i);
        Sleep(1000);
        system("cls");
    }
    Disgm();
    DisP();
    Print();
    while (!GameOver()){
        Play();
        system("cls");
        Print();
    }
    system("cls");
    puts("Game Over!");
    system("pause");
    return 0;
}



相關推薦

2048更新所有bug修復美觀外形

#include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #include<conio.h> int i,j,M[100][

各種模板不斷更新因為學習是永無止境的

int sin class insert fff com spfa 排隊 getc Tarjan模板 1 #include<complex> 2 #include<cstdio> 3 using namespace std; 4 const

leetcode:Remove Nth Node From End of List刪除連結串列倒數第n個節點面試演算法題

題目: Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1->2->

樹狀陣列單點更新和區間更新二維陣列poj2155區間更新單點查詢加入區間修改區間查詢

普通的樹狀陣列C[i]=a[i]+a[i-1]+...a[i-2^k+1]+...+a[1]; 但是所有樹狀陣列都是向上更新,向下求和。 1)、單點增減+區間求和 思路:C[x]表示該點的元素:sum(x)=C[1]+C[2]+……C[x] [cpp] view p

降階法計算行列式方法有個地方有Bug原文也更正此為更正後部分

今天用此函式做方程求解時發現有誤,特此更正:/// <summary> /// 降階法計算行列式 /// </summary> /// <param name="Determinants">N

ng-class的問題解決未找到真正的原因

判斷 問題 light 嘗試 後來 功能 log blog ng-class 問題來源是,在做點擊選中的功能時候遇到的,之前是用js來寫實現了,在改變之後用ng來寫之後 ng-class="select_x select_qz {{i == $index ? ‘selec

著名的3像素Bugdiv+img多出幾像素

AR com www ott baidu pla .... play tps <div><img src="...."></div> 給img的css設置display: block;/*用來去除div下邊莫名多出來的3px的像pa

Pod控制器應用進階四Pod更新擴縮容

vim deploy-demo.yaml [[email protected] test]# cat deploy-demo.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy name

有關IOS開發寫的好的部落格和網站持續更新含盲點

1. Swift中的trim方法處理字串:http://www.hangge.com/blog/cache/detail_1649.html 2. Swift語言中的@available和#available https://blog.csdn.net/offbye/article/deta

資料庫批量操作批量更新批量插入

資料庫的批量操作 為了儘可能提高我們的sql執行效率,一般我們針對多條資料的操作,使用批量更新或者批量插入的方式 方式如下: --批量插入 <insert id="saveUserList" parameterType="java.util.List">

字典樹模板有待更新連結串列版

連結串列版:空間小,時間大。 陣列版:空間大,時間小 struct node { int num; node *next[maxn]; }; //字典樹 class Tree{ public: node *head; //建構函式 Tree() {

你不知道的CSS常用屬性不斷更新未完待續

顏色 HEX(16進位制色:color:#FFF000)。 RGB(紅綠藍:color:rgb(255,255,0)或color:rgb(100%,100%,20%))。 RGBA(紅綠藍透明度:color:rgba(255,255,0,0.5)。 HSL(

現學現用之windbg的高階玩法(1,3,5,13,14,76,80,81,84,118,119,121,122樓更新chm文件整合7篇實戰18個輔助工具)

windbg用的人很少,通常被用作核心偵錯程式。 這對於windbg來說,確實大大限制了windbg的功能發揮。 因為工作的關係,樓主常常需要遠端除錯和到客戶現場排查問題。需要一款順手的偵錯程式。VC由於太大,安裝也麻煩,不能每次都給給客戶安裝一個VC,OD是一款很好的使用者態偵錯程式,但是對pdb支援的不好

線段樹模板區間更新區間求和區間最值

線段樹模板 #include <iostream> #include <stdio.h> #define ll long long #define lson l, mid, rt << 1 #define rson mid +

ios 企業證書明明更新我的手機可以下載其他使用者都下載不了填坑

前言:企業 $299的賬號遇到的問題。事情的經過是這樣的~ 上週五的晚上,同事在微信群裡說我們的app下載不了了,他們都試過了都是一團黑乎乎的在那,一直不動呢。what~!!額~怎麼可能上個星期還可以下載的呀,而且證書早就更新過了,怎麼會呢!於是我自己手機掃描下

js正則表示式校驗值是否為一個數字正負整數正負小數可校驗

百度了很多給出的正則清一色都是 /^[0-9]+.?[0-9]*$/ 但是經過實測此正則表示式是不完全正確的 所以自己測試並寫了新的校驗是否為數字的正則表示式,經自己測試,正負正數,正負小數均能正確判斷 /(^[\-0-9][0-9]*(.[0-9]+)?

UVA - 10020 Minimal coverage 區間更新貪心

 Minimal coverage  The Problem Given several segments of line (int the X axis) with coordinates [Li,Ri]. You are to choose the minimal a

線段樹大模板區間更新單點更新查詢區間最值等等

#include <bits/stdc++.h> #define MAXN 100010 #define inf 0x3f3f3f3f using namespace std; struct node{ int l,r;//區間[l,r

windows7下的docker的安裝及使用持續更新未完待續每天一點點

1.驗證電腦是否支援docker docker需要支援微軟的硬體虛擬化技術,且windows10只支援專業版(由於不用windows10請自行百度吧),windows10的安裝和windows7不同,windows7,8需要Toolbox,而windows10不用

ElasticSearch從入門到精通史上最全持續更新未完待續每天一點點

1.ElasticSearch的簡介 ElasticSearch:智慧搜尋,分散式的搜尋引擎 是ELK的一個組成,是一個產品,而且是非常完善的產品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibana E:EalsticSea