1. 程式人生 > >c++寫的俄羅斯方塊原始碼

c++寫的俄羅斯方塊原始碼

遊戲控制:
enter鍵開始遊戲
空格 鍵 暫停
剩下的就是地球人都知道的方向鍵

該遊戲用c++和windows api在eclipse_cpp中編寫,建立控制檯程式即可
改程式在vc6.0,和eclipse_cpp中執行正常

寫此程式職位練手,

/*
 * Data.h
 *      Author: 王振 (吉林大學)
 *      [email protected]
 *  Created on: 2008-11-11
 *
 */
#ifndef DATA_H_
#define DATA_H_
/*
 * index:7行10列陣列 每行對應一種方塊類別。
 *       每行的前四列為x座標,中間四列為y座標
 *       第九列為方塊類別程式碼,最後一列為該型別方塊有幾種變形
 *  用一個5*5的矩陣表示 7種類別方塊 共19種變形
 */
#include<windows.h>

static const int KINDS=7;//方塊種類數量
static const int COLS=10;//資料列數

//每種方塊的代號
static const int TYPE1=1;
static const int TYPE2=2;
static const int TYPE3=3;
static const int TYPE4=4;
static const int TYPE5=5;
static const int TYPE6=6;
static const int TYPE7=7;

//變形的種類
static const int RTYPE1=1;
static const int RTYPE2=2;
static const int RTYPE3=4;

static int rTypeNext;
static int rTypeDown;

//初始化方塊座標及對應的類別和變形種類
static const int index[KINDS][COLS]={
  {0,1,0,1,0,0,-1,-1,TYPE1,RTYPE1},
  {-1,0,1,2,0,0,0,0,TYPE2,RTYPE2},
  {0,0,1,1,1,0,0,-1,TYPE3,RTYPE2},
  {0,0,1,1,-1,0,0,1,TYPE4,RTYPE2},
  {-1,0,0,1,0,0,1,0,TYPE5,RTYPE3},
  {-1,0,1,1,0,0,0,-1,TYPE6,RTYPE3},
  {-1,0,1,1,0,0,0,1,TYPE7,RTYPE3}
};

//定時器ID
static const int TIMER=1;
//
//初始遊戲級別對應的時間間隔
static int CURRENTLEVEL=600;
static int level=1;

//每種圖形所包含的小方塊數
static const int CTN=4;

//方塊形狀定義
typedef struct {
 int x;
 int y;
}sCord;
sCord sDown[CTN],sNext[CTN];

//下一個方塊的座標
static RECT rectNext[CTN];
//正在下落方塊的座標
static RECT rectDown[CTN];

//顯示區域的大小
static const int cxSize=25;
static const int cySize=35;

//方塊偏離(0,0)得位置
static int offsetx;
static int offsety;

static int offsetxNext;
static int offsetyNext;

//自定義訊息
static const int MS_DOWN=10001;
//暫停
static bool go=true;
//開始
static bool startGame=false;
//結束
static bool gameOver=false;
//得分
static int score;


RECT rt={326,81,425,455};

//每個方格包含的畫素
static const int pelsSize=13;

//顯示區域大小的定義
static const POINT area[]={0,455,326,455,326,0};
//顯示區域的表示方法 最後一列最後一行分別對應該行該列所具有的方塊總數 0表示沒有方塊1表示有
static int fillArea[cySize+1][cxSize+1];

HBRUSH hBrush1=CreateSolidBrush(RGB(0,0,0));//方塊顏色
//HBRUSH hBrush1=CreateSolidBrush(RGB(240,250,100));//黃色
HBRUSH hBrush2=CreateSolidBrush(RGB(255,255,255));
HPEN hPen1=CreatePen(PS_SOLID,0,RGB(230,230,230));//背景格顏色
#endif /* DATA_H_ */

/*
 * MainPro.cpp
 *
 *  Created on: 2008-11-11
 *      Author: 王振 (吉林大學)
 *      [email protected]
 */

#include"Data.h"
#include<iostream>
#include<cstdlib>
using namespace std;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
/*
 * 逆時針方向旋轉方格 返回能否旋轉
 * @param lpsCord 要旋轉的方塊座標指標
 * @param rType  旋轉型別
 * @param rNumber 旋轉次數
 * @param 是否第一次旋轉
 */
bool rotate(sCord *lpsCord,int rType,int rNumber,bool firstRotate);
void getRandom();//初始化方格形狀
void getNext(sCord *targ,const sCord* sur);//取出下一個方塊
void draw();//繪出方格
void start();//開始遊戲
bool downAble();//能否下落
bool leftAble();//能否左移
bool rightAble();//能否右移
bool disRows(HWND hwnd);//判斷能否消行

//int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
//
//                   PSTR szCmdLine, int iCmdShow)

//void paintRect(HDC hdc,RECT&,HBRUSH hBrush);

int main()
{
    HINSTANCE hInstance=NULL;
 static TCHAR szAppName[]=TEXT("ELS");
 HWND hwnd;
 MSG msg;
 WNDCLASS wndclass;

 wndclass.style=CS_HREDRAW|CS_VREDRAW;//|~(WS_MINIMIZEBOX|WS_MAXIMIZEBOX)   ;
 wndclass.lpfnWndProc=WndProc;
 wndclass.cbClsExtra=0;
 wndclass.cbWndExtra=0;
 wndclass.hInstance=hInstance;
 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
 wndclass.hbrBackground= (HBRUSH)GetStockObject (WHITE_BRUSH);// CreateSolidBrush(RGB(195,195,237));
 wndclass.lpszMenuName= NULL;
 wndclass.lpszClassName= szAppName;

 if(!RegisterClass(&wndclass))
 {
  MessageBox(NULL,TEXT("REGISTER ERROR"),szAppName,MB_ICONERROR);
  return 0;
 }
 hwnd=CreateWindow(szAppName,TEXT("俄羅斯方塊"),WS_DLGFRAME|WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,//(WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX)&~WS_BORDER,//WS_SIZEBOX WS_OVERLAPPEDWINDOW&~WS_MAXIMIZEBOX,WS_CAPTION|//&~WS_MAXIMIZEBOX禁用最大化選項
   300,100,429,480,
   NULL,NULL,hInstance,NULL);

 ShowWindow(hwnd,SW_SHOWNORMAL);
 UpdateWindow(hwnd);

 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
    return msg.wParam;
}

void getRandom()
{
 int k=rand()%KINDS+1;

 for(int i=0;i<KINDS;i++)
 {
  if(index[i][COLS-2]==k)
  {
   rTypeNext=index[i][COLS-1];//獲得旋轉型別
   for(int j=0;j<CTN;j++)
   {
    sNext[j].x=index[i][j];
    sNext[j].y=index[i][j+4];

   }
   break;
  }

 }
 rotate(sNext,rTypeNext,rand()%rTypeNext+1,true);
 int min_y=0;
 for (int t = 0; t < CTN; t++)
  min_y = min_y > sNext[t].y ? sNext[t].y : min_y;

 offsetxNext=(int)(cxSize/2)*pelsSize+(int)(pelsSize/2);//x方向的中間顯示
 offsetyNext=(-min_y)*pelsSize+(int)(pelsSize/2);//保證置頂顯示

}
bool rotate(sCord *lpsCord,int rType,int rNumber,bool firstRotate)
{
 int tempx;
 int tempy;
    int temp;
 int tx=(offsetx-(int)(pelsSize/2))/pelsSize;
 int ty=(offsety-(int)(pelsSize/2))/pelsSize;

 bool ra=true;
 switch(rType)
 {
 case RTYPE1:
  ra=false;
  break;
 case RTYPE2:
 {
  if(rNumber%2!=0)
  {
   for (int j = 0; j < CTN; j++)
   {
    tempx=-lpsCord->y+tx;
    tempy=lpsCord->x+ty;
    lpsCord++;
    if(!firstRotate&&(fillArea[tempx][tempy]>0||tempx>24||tempx<0||tempy<0||tempy>34))
    {
     ra=false;
    }
     }
   lpsCord-=4;
  }
    if(ra)
    {
   if (rNumber % 2 != 0)
    for (int k = 0; k < CTN; k++)
    {
     temp = -lpsCord->x;
     lpsCord->x = lpsCord->y;
     lpsCord->y = temp;
     lpsCord++;
    }
    }

 }
  break;
 case RTYPE3:
  for(int k=0;k<rNumber;k++)
  {
   for(int l=0;l<CTN;l++)
   {
    tempx=lpsCord->y+tx;
    tempy=(-lpsCord->x)+ty;
    lpsCord++;
    if(!firstRotate&&(fillArea[tempx][tempy]>0||tempx>24||tempx<0||tempy<0||tempy>34))
    {
     ra = false;
    }
   }
   lpsCord-=4;
  }

 if(ra)
  for (int i = 0; i < rNumber; i++)
  {
   for (int j = 0; j < CTN; j++)
   {
    temp = -lpsCord->x;
    lpsCord->x = lpsCord->y;
    lpsCord->y = temp;
    lpsCord++;
   }
   lpsCord=lpsCord-4;
  }
  break;
 }

 return ra;

}
void getNext(sCord *targ,const sCord* sur)
{
 rTypeDown=rTypeNext;
 offsetx=offsetxNext;
 offsety=offsetyNext;
 for(int i=0;i<CTN;i++)
 {
  targ->x=sur->x;
  targ->y=sur->y;
  sur++;
  targ++;
 }
  getRandom();
}
void draw(HWND hwnd,const sCord* shape,RECT *rect,HBRUSH hBrush,int offsetx,int offsety)
{

 HDC hdc=GetDC(hwnd);
 SelectObject(hdc,hBrush);
 SelectObject(hdc,hPen1);
// SelectObject(hdc,hPen2);
// for(int i=0;i<CTN;i++)
// {
////  cout<<"draw:x="<<shape->x<<"y="<<shape->y<<endl;
//  SetRect(rect,pelsSize*shape->x-(int)(pelsSize/2)+offsetx,pelsSize*shape->y-(int)(pelsSize/2)+offsety,
//         pelsSize*shape->x+(int)(pelsSize/2)+offsetx,pelsSize*shape->y+(int)(pelsSize/2)+offsety);
//  FillRect(hdc,rect,hBrush);
//  shape++;
//  rect++;
// }
 for(int i=0;i<CTN;i++)
 {
  Rectangle(hdc,pelsSize*shape->x-(int)(pelsSize/2)+offsetx,pelsSize*shape->y-(int)(pelsSize/2)+offsety,
      pelsSize*shape->x+(int)(pelsSize/2)+offsetx+2,pelsSize*shape->y+(int)(pelsSize/2)+offsety+2);
  shape++;
//  rect++;
 }

 ReleaseDC(hwnd,hdc);
}
void start()
{
 if(!startGame)
 {
  for (int i = 0; i < cySize + 1; i++)
   for (int j = 0; j < cxSize + 1; j++)
    fillArea[i][j] = 0;
  startGame=true;
  go=true;
  score=0;
 }
}
bool downAble()
{
 bool da=true;
 int x=(offsetx-(int)(pelsSize/2))/pelsSize;
 int y=(offsety-(int)(pelsSize/2))/pelsSize;
 int xtemp;
 int ytemp;
 for(int i=0;i<CTN;i++)
 {
  xtemp=sDown[i].x+x;
  ytemp=sDown[i].y+y+1;
  if(fillArea[ytemp][xtemp]>0||ytemp>34)
  {
   da=false;
   break;
  }
 }

 if (!da)
 {
  for (int k = 0; k < CTN; k++)
  {
   xtemp = sDown[k].x + x;
   ytemp = sDown[k].y + y;
   fillArea[ytemp][xtemp] = 1;
   fillArea[ytemp][cxSize]++;
   fillArea[cySize][xtemp]++;
  }
 }
 return da;
}
bool leftAble()
{
 bool la = true;
 int x = (offsetx - (int) (pelsSize / 2)) / pelsSize;
 int y = (offsety - (int) (pelsSize / 2)) / pelsSize;
 int xtemp;
 int ytemp;
 for (int i = 0; i < CTN; i++)
 {
  xtemp = sDown[i].x + x-1;
  ytemp = sDown[i].y + y;
  if (fillArea[ytemp][xtemp] > 0 || xtemp <0)
  {
   la = false;
   break;
  }
 }
 return la;
}
bool rightAble()
{
 bool ra = true;
 int x = (offsetx - (int) (pelsSize / 2)) / pelsSize;
 int y = (offsety - (int) (pelsSize / 2)) / pelsSize ;
 int xtemp;
 int ytemp;
 for (int i = 0; i < CTN; i++)
 {
  xtemp = sDown[i].x + x+1;
  ytemp = sDown[i].y + y;
  if (fillArea[ytemp][xtemp] > 0 || xtemp > 24)
  {
   ra = false;
   break;
  }
 }
 return ra;
}
bool disRows(HWND hwnd)
{
 HDC hdc=GetDC(hwnd);
 bool da=false;
 int row[CTN];//可以消除的行
 for (int ii = 0; ii < CTN; ii++)
  row[ii] = 0;
 int number = 0;//可連續消的行數
 static int levelScore;

 SelectObject(hdc,hPen1);
 for (int i = 0; i < cySize; i++)
 {
  if (fillArea[i][cxSize] == cxSize)
   row[number++] = i;
 }
 if (number > 0)//可以消行
 {
  da=true;
  levelScore+=(number + 1) * number / 2;
  score += (number + 1) * number / 2;
  cout<<"levelScore:"<<levelScore<<endl;
  if(levelScore>19)//增加遊戲級別
  {
   levelScore=0;
   CURRENTLEVEL=(int)CURRENTLEVEL*2/3;
   SetTimer(hwnd,TIMER,CURRENTLEVEL,NULL);
   cout<<"currentlevel:"<<CURRENTLEVEL<<endl;
   for(int i=0;i<15;i++)
   {
    if((int)CURRENTLEVEL*3*(i+1)/2>=600)
    {
     level=i+2;
     cout<<"level"<<i+2<<endl;
     break;
    }
   }
  }
  InvalidateRect(hwnd,&rt,true);
  for (int k = 0; k < number; k++)
  {
   for(int i=row[k];i>0;i--)
   {
    for(int j=0;j<cxSize+1;j++)
    {
     fillArea[i][j]=fillArea[i-1][j];

    }
   }
  }

  InvalidateRect(hwnd,NULL,true);
 }
 ReleaseDC(hwnd,hdc);
 return da;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 RECT r;
 static bool down=false;
 bool isSend=false;
 switch(message)
 {
 case WM_CREATE:
 {
  SetTimer(hwnd,TIMER,CURRENTLEVEL,NULL);
  cout<<"level1"<<endl;
  return 0;
 }
 case WM_SIZE:
//  cout<<LOWORD(lParam)<<endl
//       <<HIWORD(lParam)<<endl;
  return 0;
// case WM_GETMINMAXINFO:
//  return 0;
 case WM_TIMER:
 {
  if(startGame&&go)
  {
   if (down)
   {
    if(!downAble())//不能再下落條件
    {
     cout<<"can not down"<<endl;
     down=false;
     disRows(hwnd);
     if(!isSend)
     {
      SendMessage(hwnd,MS_DOWN,0,0);
      isSend=true;
     }

    }
    else
    {
     draw(hwnd, sDown, rectDown,(HBRUSH)GetStockObject(WHITE_BRUSH), offsetx, offsety);
     offsety += pelsSize;
     draw(hwnd, sDown, rectDown,hBrush1, offsetx, offsety);
    }
   }
  }

  return 0;
 }
 case MS_DOWN:
 {
  draw(hwnd,sNext,rectNext,(HBRUSH)GetStockObject(WHITE_BRUSH),369,44);
  getNext(sDown,sNext);

  draw(hwnd,sNext,rectNext,hBrush1,369,44);
  draw(hwnd,sDown,rectDown,hBrush1,offsetx,offsety);
  //判斷遊戲是否結束
  offsety-=pelsSize;
  if(downAble())
  {
   offsety+=pelsSize;
   isSend=false;
   down=true;
  }
  else
  {
   cout<<"game over!"<<endl;
   startGame=false;
   gameOver=true;
   InvalidateRect(hwnd,&rt,true);

  }


 }
 case WM_PAINT:
 {
  hdc = BeginPaint(hwnd, &ps);
  GetClientRect(hwnd, &r);
  SelectObject(hdc,hPen1);
  SelectObject(hdc,hBrush1);
  for(int i=1;i<cxSize+8;i++)
  {
   MoveToEx(hdc,i*pelsSize,0,NULL);
   LineTo(hdc,i*pelsSize,476);
  }
  for(int j=1;j<cySize;j++)
  {
   MoveToEx(hdc,0,j*pelsSize,NULL);
   LineTo(hdc,425,j*pelsSize);
  }

  SaveDC(hdc);
  for(int t=0;t<cySize;t++)
   for(int k=0;k<cxSize;k++)
   {
    if(fillArea[t][k]>0)
    {
     Rectangle(hdc,k*pelsSize,t*pelsSize,(k+1)*pelsSize+1,(t+1)*pelsSize+1);
    }
   }
  if(startGame)
  {
   draw(hwnd,sNext,rectNext,hBrush1,369,44);
   draw(hwnd,sDown,rectDown,hBrush1,offsetx,offsety);
  }
  FillRect(hdc,&rt,hBrush2);
  char ss[20];
  char ll[20];
  wsprintf(ss,"score:%d",score);
  wsprintf(ll,"level:%d",level);
  TextOut(hdc,330,300,ll,lstrlen(ll));
  TextOut(hdc,330,320,ss,lstrlen(ss));

  if(gameOver)
  {
   char g[]="Game Over!!";
   TextOut(hdc,330,200,g,lstrlen(g));
  }


  SelectObject(hdc, GetStockObject(BLACK_PEN));
  Polyline(hdc, area, 3);//繪製一個矩形
  MoveToEx(hdc, 325, 80, NULL);
  LineTo(hdc, 425, 80);

  EndPaint(hwnd, &ps);

  return 0;
 }
 case WM_KEYDOWN:
  switch(wParam)
  {
  case VK_UP:
  {
   if(go&&startGame)
   {
    down=false;
    draw(hwnd,sDown,rectDown,(HBRUSH)GetStockObject(WHITE_BRUSH),offsetx,offsety);
    rotate(sDown,rTypeDown,1,false);
    draw(hwnd,sDown,rectDown,hBrush1,offsetx,offsety);

   }

     }
   return 0;
  case VK_DOWN:
  {
   if(go&&startGame)
   {
   down=false;
   draw(hwnd,sDown,rectDown,(HBRUSH)GetStockObject(WHITE_BRUSH),offsetx,offsety);
   int k=(offsety-(int)(pelsSize)/2)/pelsSize;
   while(k<cySize)
   {
    if(downAble())
    {
     offsety+=pelsSize;
    }
    else
     break;
   }
   draw(hwnd,sDown,rectDown,hBrush1,offsetx,offsety);
   disRows(hwnd);
   SendMessage(hwnd,MS_DOWN,0,0);
   }

   return 0;
  }
  case VK_LEFT:
  {
   if(leftAble()&&go&&startGame)
   {
    down=false;
    draw(hwnd,sDown,rectDown,(HBRUSH)GetStockObject(WHITE_BRUSH),offsetx,offsety);
    offsetx-=pelsSize;
    draw(hwnd,sDown,rectDown,hBrush1,offsetx,offsety);

   }

   return 0;
  }
  case VK_RIGHT:
  {
   if(rightAble()&&go&&startGame)
   {
    down=false;
    draw(hwnd, sDown, rectDown, (HBRUSH) GetStockObject(WHITE_BRUSH),
         offsetx, offsety);
       offsetx+=pelsSize;
       draw(hwnd, sDown, rectDown, hBrush1,
         offsetx, offsety);

   }

   return 0;
  }
  case VK_SPACE:
  {
   go=!go;
   return 0;

  }
  case VK_RETURN:
  {
   if(!startGame&&!gameOver)
   {
    cout<<"startGame"<<endl;
    gameOver=false;
    start();
    getRandom();
    SendMessage(hwnd,MS_DOWN,0,0);

   }
   if(!startGame&&gameOver)
   {
    cout<<"RestartGame!"<<endl;
    gameOver=false;
    start();
    level=1;
    InvalidateRect(hwnd,NULL,true);
    getRandom();
    SendMessage(hwnd,MS_DOWN,0,0);
   }
   return 0;
  }
  }

  return 0;
 case WM_KEYUP:
  switch(wParam)
  {
  case VK_UP:
   if(go)
    down=true;
   return 0;
  case VK_LEFT:
   if(go)
    down=true;
   return 0;
  case VK_RIGHT:
   if(go)
    down=true;
   return 0;
  }
  return 0;

 case WM_DESTROY:
  DeleteObject(hBrush1);
  DeleteObject(hBrush2);
  DeleteObject(hPen1);
  KillTimer(hwnd,TIMER);
  PostQuitMessage(0);

  return 0;

 }
 return DefWindowProc(hwnd,message,wParam,lParam);
}

相關推薦

c++俄羅斯方塊小遊戲

第二篇部落格 把我之前用c++寫的一個俄羅斯方塊也傳上來算了,這個程式是我學完c++後寫的,雖然有點長,看起來比較嚇人,但是程式碼絕對是你能夠找到的理解起來最簡單的俄羅斯方塊的程式碼,對於一些基礎不好的同學還是非常友好的。(歡迎批評指正) #include<iostream>

c++俄羅斯方塊原始碼

遊戲控制:enter鍵開始遊戲 空格 鍵 暫停剩下的就是地球人都知道的方向鍵 該遊戲用c++和windows api在eclipse_cpp中編寫,建立控制檯程式即可改程式在vc6.0,和eclipse_cpp中執行正常 寫此程式職位練手, /* * Data.h *  

QT/c++ 簡易俄羅斯方塊

第一次用QT寫的小專案,一切為了實現效果不擇手段,沒注意優化演算法什麼,後期也懶得去改了,遊戲目前還有個小bug,消兩行只加一行的分數,懶鬼實在不想改了。 此文單純留作記錄。 另外樣式表內容參考《QT CREATOR快速入門第三版》,不得不說這本書對於萌新真的很友好。 大概介面

C語言——俄羅斯方塊

最近朋友找到一個用c寫的俄羅斯方塊程式碼,試玩了一下,非常有趣。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h>

學習C#從俄羅斯方塊開始(一)概述

       前幾天和一個在讀的本科生聊天,他一直在抱怨學校學習的理論知識太多,實踐的機會太少。擔心自己因此畢業後可能難以找到工作。我認為一個人要是想投入開發,他總是可以找到專案的。與其把自己的時間浪費

Java俄羅斯方塊,瞭解一下

Java俄羅斯方塊目錄:簡要分析:俄羅斯方塊的規則在這裡就不細說了,大家都知道,控制方塊的移動,到底即停,當方塊能填滿一行時,便消除那一行的方塊,並計分...我們將用JPanel來完成整個遊戲的製作。首先我們來看看遊戲執行時的圖片。 (遊戲圖片 )上圖是遊戲製作過程中我截的一

VS2013環境下編寫的俄羅斯方塊原始碼

#include <stdio.h> #include <windows.h> #include <iostream> #include <stdlib.h> #include <time.h> #include

用python 和pyqt5俄羅斯方塊遊戲

# 俄羅斯方塊遊戲效果展示本章我們要製作一個俄羅斯方塊遊戲。## Tetris> 譯註:稱呼:方塊是由四個小方格組成的俄羅斯方塊遊戲是世界上最流行的遊戲之一。是由一名叫Alexey Pajitnov的俄羅斯程式設計師在1985年製作的,從那時起,這個遊戲就風靡了各個遊戲

用Java俄羅斯方塊

假期閒著無事,就用一週多的時間看了百度java吧的一位大神(alwing)釋出的視訊,學著用java寫了一個俄羅斯方塊,在此就以釋出原始碼以及必要講解的形式來感謝他的幫助。當然我這裡也是做了一些改動,做出來的程式介面以及功能沒有和他的完全一樣。 整個程式執行起

C語言圖形程式設計--俄羅斯方塊製作(二)原始碼

所有原始碼檔案,此為本人2年前所作,設計上還有些缺陷。希望大家不吝指正。 下面是標頭檔案head.h /************************ (C) COPYRIGHT 2013 yang_yulei ************************ *

發個無聊時俄羅斯方塊(分為SDL和Qt兩個版本)

app deb fcm cnn 無聊 線程 dac tutorial spi 6213-ChineseZodiac(map) 多線程問題 【CF472G】【XSY2112】DesignTutorial壓位 大家都開始C++0x了,我也來湊熱鬧,今天的主題是《調侃rvalue

上次錯了,是俄羅斯方塊源代碼

and iostream string efault false cin owin ring exit #include <iostream>#include <string>#include <ctime>#include <cs

C++藉助curses庫實現俄羅斯方塊

主要要實現如下幾個功能:方塊的移動控制、方塊變形、判定方塊是否接觸邊界和進行方塊堆積、對方塊進行消除。 1.方塊的移動控制上下左右四個方向上-->變形,下-->加速下落,左-->向左移動,右-->向右移動注意在移動的時候,還要判定是否接觸邊界,特別是向下移動,除了需要確定是否接觸底部

俄羅斯方塊實驗報告(附原始碼

C++面向物件程式綜合設計 一、基本要求 1、綜合實驗設計可採取一人一設計,也可以組成小組,每組成員(不得超過4人)分工合作完成一個設計,每個人的任務不同。 2、要求利用面向物件程式設計方法以及C++的程式設計思想來完成系統的設計。 3、要求有選單、檔案操作,資料使用陣列、結構體等均可,鍵盤

offer(一): 俄羅斯方塊成功次數輸出 C++實現

題目連結:https://www.nowcoder.com/test/question/done?tid=20189002&qid=224352 題目描述: 小易有一個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。 熒幕上一共有 n

[文件和原始碼分享] 基於Python的PyGame的俄羅斯方塊遊戲設計與實現

近年來,隨著遊戲產業的突飛猛進,遊戲玩家的技術也是與日俱增,當你看見遊戲高手完美的表演時,你是否想過我也能達到那種水平,本程式用Python語言編寫俄羅斯方塊,左側顯示正在執行的遊戲,右邊顯示下一個出現的形狀、等級和積分等。遊戲執行時隨著等級的提高而速度加快,這需要玩家快速操作。因此,本程式主要意義是為高手玩

CCF計算機軟體能力認證 C++ 俄羅斯方塊

問題描述   俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閒遊戲。   遊戲在一個15行10列的方格圖上進行,方格圖上的每一個格子可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有一個新的由4個小方塊組成的板塊從方格圖的上方落下,玩家可以操作板塊左右移動放到合適的

俄羅斯方塊c++)

1 void Diamond::create() 2 { 3 Frame F; 4 Tool T; 5 int key; 6 int base_point; 7 int rotate_time=0; 8 srand(time(NULL));

C++小遊戲(原創)——俄羅斯方塊

/* Designed by Ziwen 2018/09/26. */ #include<iostream> #include<cstring> #include<stdlib.h> #include<time.h&

c++小遊戲——俄羅斯方塊

#include<cstdio> #include<windows.h> #include<ctime> int a[24][17],i,j,tim=800,ti=800,shape=0,b,bn,ta[4][4],turn[