資源簡介
俄羅斯方塊AI的C代碼和設計文檔
(包含調試信息的版本與不包含調試信息的版本)

代碼片段和文件信息
//?Tetris.cpp?:?定義控制臺應用程序的入口點。
//
//#include?“stdafx.h“
#include?“string.h“
#include?“stdlib.h“
#include?“stdio.h“
#include?“time.h“
int?const?LINE=17;
int?const?WIDTH=10;?
int?HIGHLIMIT=6;
int?SCORE;
typedef?struct?Status{
int?xyOffset[4][2];?//?block?body?based?on?base?point?xy
int?curDrc;?//direction
int?side;?//?the?leftest?point?x?
Status?*next;
}Status;
typedef?struct?Factor{
Status?*status;?//status?of?Block
int?faces;
int?fullLine;
int?emptyCells;
int?hight;
int?realX;?//coordinate?of?Block
int?realY;?//coordinate?of?Block
}Factor;
int?Board[LINE+1][WIDTH];//?Game?board?17line*10width
int?TempBoard[LINE+1][WIDTH];//Used?to?get?board?Status
Status?*?Block[8];?//?7?blocksblock?list
//advanced?array
int?const?AdvLength=20;//?length?of?the?array
int?AdvBlocks[AdvLength];?//advanced?blocks
int?CurIndex;?//current?index?of?in?the?array
void?PrintTempBoard()
{
//int?minLine=GetTempBoard();
for(int?i=0;i for(int?j=0;j printf(“%c“TempBoard[i][j]?‘x‘:‘-‘);
printf(“\n“);
}
void?PrintBoard()
{
for(int?y=0;y for(int?x=0;x printf(“%c“Board[LINE-y-1][x]?‘X‘:‘-‘);
}
void?PrintBlock(Status?block)
{
int?xy[6][6]={0};
for(int?i=0;i<4;i++)
{
printf(“(%d%d)\t“block.xyOffset[i][0]block.xyOffset[i][1]);
int?x=block.xyOffset[i][0]+2;
int?y=block.xyOffset[i][1]+2;
xy[x][y]=1;
}
printf(“\n“);
for(int?i=5;i>=0;i--printf(“\n“))
for(int?j=0;j<6;j++)
{
printf(“%c“xy[j][i]?‘X‘:‘-‘);
}
printf(“\n\n“);
}
/*
init?the?AdvBlocks?array?
*/
int?containBlock(int?block)
{
for(int?i=0;i if(AdvBlocks[i]==block) return?1;
return?0;
}
void?initAdvBlocks()
{
srand(time(NULL));
for(int?i=0;i AdvBlocks[i]=rand()%7+1;
}
/*
get?a?new?block
*/
int?getNextBlock()
{
int?temp=AdvBlocks[CurIndex];
//AdvBlocks[CurIndex]=?containBlock(2)?rand()%7+1:2;
AdvBlocks[CurIndex]=?rand()%7+1;
CurIndex=(CurIndex+1)%AdvLength;
//return?rand()%2?5:7;
return?temp;
}
/*
preview?the?next?block
*/
int?viewNextBlock()
{
return?AdvBlocks[(CurIndex+1)%AdvLength];
}
/*
determine?whether?a?cell?is?inside?the?board?(Board?/?TempBoard)
*/
int?insideBoard(int?yint?x)
{
return??(y>=0?&&?y=0&&?x }
/*
Get?the?TempBoard?which?is?used?to?specify?the?empty?space?where?the?block?can?be?put.
*/
void?GetTempBoard()
{
memset(TempBoard1sizeof(TempBoard));
for(int?x=0;x {
for(int?y=LINE-1;y>=0;y--)
{
if(Board[y][x]) break;
TempBoard[y][x]=0;
}
}
//PrintTempBoard();
}
/*
Determine?whether?the?block?is?fit?into?the?TempBoard.
*/
int?fitIn(Status?*?block??int?x?int?y)
{
for(int?i=0;i<4;i++)
{
int?realX=x+block->xyOffset[i][0];
int?realY=y+block->xyOffset[i][1];
if(!insideBoard(realYreal
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????13335??2009-09-23?14:16??Tetris_Debug.cpp
?????文件?????182390??2009-06-07?16:37??Design?specification.docx
?????文件??????12458??2009-06-01?16:43??Tetris_Sec.cpp
-----------?---------??----------?-----??----
???????????????208183????????????????????3
- 上一篇:教學計劃編制問題--課程管理
- 下一篇:UML案例:BBS系統一
評論
共有 條評論