大家好,欢迎来到IT知识分享网。
#include<iostream> #include<cstdio> #include<cstdlib> #include<conio.h> #include<ctime> #include<cmath> #include<windows.h> bool ak; using namespace std; int score=0,best=0; int premove[5][5]; void SCAB(int ForgC, int BackC){
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor); } char instruction[36][35]={
"EDITION 1.03", "get AK to win!", " ", "Use arrow keys or", "WASD to move block", "Use R to restart game", "Use Q to quit game", " ", "BLOCKS", "CE=2 compile error", "@=4 judging", "RE=8 runtime error", "TLE=16 time limit exceeded", "MLE=32 memory limit exceeded", "ILE=64 idleness limit exceeded", "OLE=128 output limit exceeded", "UKE=256 unknown error", "WA=512 wrong answer", "PC=1024 partly correct", "AC=2048 accepted", "PE=4096 presentation error", "DOJ=8192 denial of judging", "SJE=16384 special judge error", "AU=32768", "AK=65536 (win)", "#=*1 pragma...", "O2=*2", "O3=*4", " ", "made by jiangpeiyuan", "original 2048:", "https://2048game.com/", "original AK-IOI:", "https://ak-ioi.com/apps/oi-2048/", " ", "Hope You Like It!" }; char endskin[14][61]={
"+----------------------------------------------------------+", "| A FFFFF OOO ! |", "| # # A A F O O ! # # |", "| A A FFFFF O O ! |", "| /---\\ AAAAA F O O /---\\ |", "| / \\ A A F OOO ! / \\ |", "+----------------------------------------------------------+", "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "|.........................A....K..KK.......................|", "+...#...#................A.A...K.K.................#...#...+", "|................-----..A...A..KK.....-----................|", "+..\\...../..............AAAAA..K.K................\\...../..+", "|...\\---/...............A...A..K..KK...............\\---/...|", "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" }; int color_type[20]={
0,6,1,5,13,13,13,13,0,4,3,2,12,10,8,14,9,15,14,9}; char scorenum[9][41]={
"----------------------------------------", " ", " # # # ", "# # # # # # # # # # # # # ", "# # # # # # ", "# # # # # # # # # # # # # ", " # # # ", " ", "----------------------------------------" }; char intro[9][30]={
"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@", ". .", "@ # ] ]] III OOO III @", ". # # ] ] I O O I .", "@ # # ]] @ I O O I @", ". ] ] I O O I .", "@ # # ] ]] III OOO III @", ". .", "@.@.@.@.@.@.@.@.@.@.@.@.@.@.@" }; char endd[5][14]={
" BBBB JJJ ", " B B J ", " BBBB J ", " B B J J ", " BBBB JJ " }; char better[36][16]={
"~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~", "~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~~~~~#~#~~~~~~","~~~~~~~~~~","~~~~~~#~#~~~~~~","~~~~~~~~~~","~~~~~~#~#~~~~~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~", "~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~&&&&&~&&&&&~~","~~&~~~&~~~~~&~~","~~&~~~&~&&&&&~~","~~&~~~&~&~~~~~~","~~&&&&&~&&&&&~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~", "~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~","~~@#@#@~@#@#@~~","~~#~~~#~~~~~#~~","~~@~~~@~@#@#@~~","~~#~~~#~~~~~#~~","~~@#@#@~@#@#@~~","~~~~~~~~~~~~~~~","~~~~~~~~~~~~~~~" }; char tiles[160][16]={
" "," "," "," "," "," "," "," "," ", "@@@@@@@@@@@@@@@","@ @","@ |||| ||||| @","@ | | @","@ | ||||| @","@ | | @","@ |||| ||||| @","@ @","@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@","@ * @","@ $$$$$ @","@ $ * @","@ @","@ * $ @","@ $$$$$ @","@ * @","@@@@@@@@@@@@@@@", "&&&&&&&&&&&&&&&","& &","& !!!! !!!!! &","& ! ! ! &","& !!!! !!!!! &","& ! ! ! &","& ! !! !!!!! &","& &","&&&&&&&&&&&&&&&", "&&&&&&&&&&&&&&&","& &","& # &","& # # # &","& # # &","& # # # &","& # &","& &","&&&&&&&&&&&&&&&", "#","#.............#","#.%.%.%...%%%.#","#.%%%.%...%...#","#.%%%.%...%%%.#","#.%.%.%...%...#","#.%.%.%%%.%%%.#","#.............#","#", "#","#.............#","#.@@@.@...@@@.#","#..@..@...@...#","#..@..@...@@@.#","#..@..@...@...#","#.@@@.@@@.@@@.#","#.............#","#", "]]]]]]]]]]]]]]]","].............]","].OOO.O...OOO.]","].O.O.O...O...]","].O.O.O...OOO.]","].O.O.O...O...]","].OOO.OOO.OOO.]","].............]","]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]","].............]","].$.$.$.$.$$$.]","].$.$.$.$.$...]","].$.$.$$..$$$.]","].$.$.$.$.$...]","].$$$.$.$.$$$.]","].............]","]]]]]]]]]]]]]]]", "XXXXXXXXXXXXXXX","X-------------X","X-W-W-W---W---X","X-W-W-W--W-W--X","X-W-W-W-W---W-X","X-W-W-W-WWWWW-X","X--W-W--W---W-X","X-------------X","XXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXX","X-------------X","X-@@@@---@@@@-X","X-@---@-@-----X","X-@@@@--@-----X","X-@-----@-----X","X-@------@@@@-X","X-------------X","XXXXXXXXXXXXXXX", "$$$$$$$$$$$$$$$","$-------------$","$---%----%%%%-$","$--%-%--%-----$","$-%---%-%-----$","$-%%%%%-%-----$","$-%---%--%%%%-$","$-------------$","$$$$$$$$$$$$$$$", "$$$$$$$$$$$$$$$","$-------------$","$-PPPP--PPPPP-$","$-P---P-P-----$","$-PPPP--PPPPP-$","$-P-----P-----$","$-P-----PPPPP-$","$-------------$","$$$$$$$$$$$$$$$", "///","/&&&&&&&&&&&&&/","/&..&&...&&&.&/","/&.&.&.&.&&&.&/","/&.&.&.&.&&&.&/","/&.&.&.&.&.&.&/","/&..&&...&&.&&/","/&&&&&&&&&&&&&/","///", "///","/&&&&&&&&&&&&&/","/&& &&& & &/","/& &&&&& & &&&/","/&& &&&& & &/","/&&& & & & &&&/","/& &&& && &/","/&&&&&&&&&&&&&/","///", "|-|-|-|-|-|-|-|","-@@@@@@@@@@@@@-","|@@@`@@@`@@@`@|","-@@`@`@@.@@@.@-","|@`@@@`@`@@@`@|","-@.`.`.@.@@@.@-","|@`@@@`@@.`.@@|","-@@@@@@@@@@@@@-","|-|-|-|-|-|-|-|", "---.---.---.---",".@#@#@#@#@#@#@.","-#@# #@# #@ #-",".@# # #@ @ @#@.","-# #@# # @#@#-",".@ @ @ @#@.","-# #@# # #@ #-",".@#@#@#@#@#@#@.","---.---.---.---", }; int a[5][5]={
{
1,3,2,1}, {
4,7,3,1}, {
6,10,4,2}, {
2,3,2,4} }; char pressing; void checkmovement(){
int key; while(true){
key=0; if(_kbhit) key=getch(); if(key==72||key==119){
pressing='u'; break; } if(key==75||key==97){
pressing='l'; break; } if(key==115||key==80){
pressing='d'; break; } if(key==100||key==77){
pressing='r'; break; } if(key==113){
pressing='Q'; break; } if(key==114){
pressing='R'; break; } } } void print(){
for(int i=0;i<9;i++){
SCAB(color_type[i+9],0); printf("%s ",intro[i]); int pf=; while(pf){
for(int j=score/pf%10*4;j<=score/pf%10*4+3;j++){
if(score<pf) SCAB(8,0); else SCAB(7,0); printf("%c",scorenum[i][j]); } pf/=10; } printf("\n"); } printf("\n"); for(int i=0;i<4;i++){
for(int j=0;j<9;j++){
for(int k=0;k<4;k++){
if(a[i][k]>=0){
SCAB(7,color_type[a[i][k]]); printf("%s",tiles[a[i][k]*9+j]); } else{
SCAB(color_type[16+a[i][k]*-1],0); printf("%s",better[-a[i][k]*9+j]); } } SCAB(7,0); printf(" "); if(i*9+j>=9&&i*9+j<=24) SCAB(color_type[i*9+j-8],0); if(i*9+j==16) SCAB(7,0); printf("%s",instruction[i*9+j]); printf("\n"); } } printf("\n"); for(int i=0;i<5;i++){
SCAB(0,2); printf("%s",endd[i]); SCAB(0,0); printf(" "); int pf=; SCAB(0xe,0); while(pf){
for(int j=best/pf%10*4;j<=best/pf%10*4+3;j++){
printf("%c",scorenum[i+2][j]); } pf/=10; } printf("\n"); } } int gameover; void createrandomblock(){
int emptyx[18],emptyy[18]; int cnt=0; for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]==0){
cnt++; emptyx[cnt]=i; emptyy[cnt]=j; } } } srand(time(NULL)); int num=rand()%cnt+1; int ran[16]={
1,1,1,1,1,1,1,1,1,1,1,2,2,-1,-1,-2}; a[emptyx[num]][emptyy[num]]=ran[rand()%16]; } void startgame(){
ak=false; score=0; gameover=0; for(int i=0;i<4;i++){
for(int j=0;j<4;j++) a[i][j]=0; } createrandomblock(); createrandomblock(); } void moveblock(){
if(pressing=='l'){
for(int i=0;i<4;i++){
int putpoint=0; for(int j=0;j<4;j++){
if(a[i][j]!=0){
a[i][putpoint]=a[i][j]; if(putpoint!=j) a[i][j]=0; putpoint++; } } for(int j=0;j<4;j++){
if(a[i][j]>0&&a[i][j]<16&&a[i][j]==a[i][j+1]){
a[i][j]++; a[i][j+1]=0; score+=pow(2,a[i][j]); } else if(a[i][j]==-2&&a[i][j]==a[i][j+1]){
a[i][j]=-3; a[i][j+1]=0; score+=pow(2,a[i][j]); } else if(a[i][j]<=-1&&a[i][j+1]>0&&a[i][j+1]<=17+a[i][j]){
if(premove[i][j]!=0&&premove[i][j+1]!=0){
a[i][j]=a[i][j+1]-a[i][j]-1; a[i][j+1]=0; score+=pow(2,a[i][j]); } } else if(a[i][j+1]<=-1&&a[i][j]>0&&a[i][j]<=17+a[i][j+1]){
if(premove[i][j]!=0&&premove[i][j+1]!=0){
a[i][j]=a[i][j]-a[i][j+1]-1; a[i][j+1]=0; score+=pow(2,a[i][j]); } } } putpoint=0; for(int j=0;j<4;j++){
if(a[i][j]!=0){
a[i][putpoint]=a[i][j]; if(putpoint!=j) a[i][j]=0; putpoint++; } } } } / else if(pressing=='r'){
for(int i=0;i<4;i++){
int putpoint=3; for(int j=3;j>=0;j--){
if(a[i][j]!=0){
a[i][putpoint]=a[i][j]; if(putpoint!=j) a[i][j]=0; putpoint--; } } for(int j=3;j>=0;j--){
if(a[i][j]>0&&a[i][j]<16&&a[i][j]==a[i][j-1]){
a[i][j]++; a[i][j-1]=0; score+=pow(2,a[i][j]); } else if(a[i][j]==-2&&a[i][j]==a[i][j-1]){
a[i][j]=-3; a[i][j-1]=0; score+=pow(2,a[i][j]); } else if(a[i][j]<=-1&&a[i][j-1]>0&&a[i][j-1]<=17+a[i][j]){
if(premove[i][j]!=0&&premove[i][j-1]!=0){
a[i][j]=a[i][j-1]-a[i][j]-1; a[i][j+1]=0; score+=pow(2,a[i][j]); } } else if(a[i][j-1]<=-1&&a[i][j]>0&&a[i][j]<=17+a[i][j-1]){
if(premove[i][j]!=0&&premove[i][j-1]!=0){
a[i][j]=a[i][j]-a[i][j-1]-1; a[i][j-1]=0; score+=pow(2,a[i][j]); } } } putpoint=3; for(int j=3;j>=0;j--){
if(a[i][j]!=0){
a[i][putpoint]=a[i][j]; if(putpoint!=j) a[i][j]=0; putpoint--; } } } } else if(pressing=='u'){
for(int i=0;i<4;i++){
int putpoint=0; for(int j=0;j<4;j++){
if(a[j][i]!=0){
a[putpoint][i]=a[j][i]; if(putpoint!=j) a[j][i]=0; putpoint++; } } for(int j=0;j<4;j++){
if(a[j][i]>0&&a[j][i]<16&&a[j][i]==a[j+1][i]){
a[j][i]++; a[j+1][i]=0; score+=pow(2,a[j][i]); } else if(a[j][i]==-2&&a[j][i]==a[j+1][i]){
a[j][i]=-3; a[j+1][i]=0; score+=pow(2,a[j][i]); } else if(a[j][i]<=-1&&a[j+1][i]>0&&a[j+1][i]<=17+a[j][i]){
if(premove[j][i]!=0&&premove[j+1][i]!=0){
a[j][i]=a[j+1][i]-a[j][i]-1; a[j+1][i]=0; score+=pow(2,a[j][i]); } } else if(a[j+1][i]<=-1&&a[j][i]>0&&a[j][i]<=17+a[j+1][i]){
if(premove[j][i]!=0&&premove[j+1][i]!=0){
a[j][i]=a[j][i]-a[j+1][i]-1; a[j+1][i]=0; score+=pow(2,a[j][i]); } } } putpoint=0; for(int j=0;j<=3;j++){
if(a[j][i]!=0){
a[putpoint][i]=a[j][i]; if(putpoint!=j) a[j][i]=0; putpoint++; } } } } else if(pressing=='d'){
for(int i=0;i<4;i++){
int putpoint=3; for(int j=3;j>=0;j--){
if(a[j][i]!=0){
a[putpoint][i]=a[j][i]; if(putpoint!=j) a[j][i]=0; putpoint--; } } for(int j=3;j>=0;j--){
if(a[j][i]>0&&a[j][i]<16&&a[j][i]==a[j-1][i]){
a[j][i]++; a[j-1][i]=0; score+=pow(2,a[j][i]); } else if(a[j][i]==-2&&a[j][i]==a[j-1][i]){
a[j][i]=-3; a[j-1][i]=0; score+=pow(2,a[j][i]); } else if(a[j][i]<=-1&&a[j-1][i]>0&&a[j-1][i]<=17+a[j][i]){
if(premove[j][i]!=0&&premove[j-1][i]!=0){
a[j][i]=a[j-1][i]-a[j][i]-1; a[j-1][i]=0; score+=pow(2,a[j][i]); } } else if(a[j-1][i]<=-1&&a[j][i]>0&&a[j][i]<=17+a[j-1][i]){
if(premove[j][i]!=0&&premove[j-1][i]!=0){
a[j][i]=a[j][i]-a[j-1][i]-1; a[j-1][i]=0; score+=pow(2,a[j][i]); } } } putpoint=3; for(int j=3;j>=0;j--){
if(a[j][i]!=0){
a[putpoint][i]=a[j][i]; if(putpoint!=j) a[j][i]=0; putpoint--; } } } } } void checkover(){
bool flag1=true; for(int i=0;i<4;i++){
for(int j=0;j<4;j++) {
if(a[i][j]<=0) flag1=false; } } for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]==a[i+1][j]&&a[i][j]!=0) flag1=false; if(a[i][j]==a[i][j+1]&&a[i][j]!=0) flag1=false; } } if(flag1) gameover=1; } void over(); void checkak(){
bool flag=false; for(int i=0;i<4;i++){
for(int j=0;j<4;j++) if(a[i][j]==16) flag=true; } if(flag){
gameover=2; over(); gameover=0; ak=true; } } void over(){
system("cls"); for(int i=0;i<9;i++){
SCAB(color_type[i+9],0); printf("%s ",intro[i]); int pf=; while(pf){
for(int j=score/pf%10*4;j<=score/pf%10*4+3;j++){
if(score<pf) SCAB(8,0); else SCAB(7,0); printf("%c",scorenum[i][j]); } pf/=10; } printf("\n"); } printf("\n"); for(int i=0;i<4;i++){
for(int j=0;j<9;j++){
if(9*i+j>=15&&9*i+j<=21){
if(gameover==1){
SCAB(0,12); printf("%s",endskin[9*i+j-15]); } else{
SCAB(0,11); printf("%s",endskin[9*i+j-15+7]); } } else{
for(int k=0;k<4;k++){
if(a[i][k]>=0){
SCAB(7,color_type[a[i][k]]); printf("%s",tiles[a[i][k]*9+j]); } else{
SCAB(color_type[16+a[i][k]*-1],0); printf("%s",better[-a[i][k]*9+j]); } } } SCAB(7,0); printf(" "); if(i*9+j>=9&&i*9+j<=24) SCAB(color_type[i*9+j-8],0); if(i*9+j==16) SCAB(7,0); printf("%s",instruction[i*9+j]); printf("\n"); } } printf("\n"); for(int i=0;i<5;i++){
SCAB(0,2); printf("%s",endd[i]); SCAB(0,0); printf(" "); int pf=; SCAB(0xe,0); while(pf){
for(int j=best/pf%10*4;j<=best/pf%10*4+3;j++){
printf("%c",scorenum[i+2][j]); } pf/=10; } printf("\n"); } } int main(){
while(true){
startgame(); system("cls"); print(); while(!gameover){
checkmovement(); if(pressing=='Q') exit(0); if(pressing=='R') break; for(int i=0;i<4;i++){
for(int j=0;j<4;j++) premove[i][j]=a[i][j]; } moveblock(); system("cls"); print(); for(int i=1;i<=;i++){
i*=2; i/=2; i+=2; i-=2; } bool flag=false; for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]!=premove[i][j]){
flag=true; } } } best=max(best,score); if(flag){
score++; createrandomblock(); best=max(best,score); system("cls"); print(); } if(!ak){
checkak(); if(ak){
checkmovement(); system("cls"); print(); if(pressing=='R') break; if(pressing=='Q') return 0; } } checkover(); } if(gameover!=0){
over(); checkmovement(); if(pressing=='Q') exit(0); } } return 0; }
求点赞收藏关注。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127757.html