Tetris.rar

  • PUDN用户
    了解作者
  • C/C++
    开发工具
  • 8KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 5
    下载次数
  • 2009-11-24 13:04
    上传日期
这是一个C语言的俄罗斯方块游戏的源代码, 通过win-tc2.0编译,采用高效算法
Tetris.rar
  • Tetris
  • MySysFun
  • keyfun.c
    3.9KB
  • KEYFUN.OBJ
    763B
  • TETRIS.OBJ
    5.4KB
  • Data.c
    1.7KB
  • Tetris.c
    10.3KB
内容介绍
/**************************************** APPNAME : Tetris VERSION : V1.0 COMPILERS : Win-Tc 1.9.1 AUTHOR : Smokeboy DONEDATE : 9:25 2009-9-6 *****************************************/ /* 这是我以前在其它环境下编写的一个俄罗斯方块游戏,稍作修改移植到TC环境下。 程序通过Win-Tc 1.9.1编译。 程序还有许多细节没有完善,如果你完善了,我很愿意拜读一下。 所以希望你能将完善后的程序发到我的邮箱 Smoketad@126.com (欢迎来信切磋交流) 你可以对本程序进行修改或转载。但请保留原作者说明。 代码仅供交流学习之用 */ /* 旋转: UP(方向键) 向下: DOWN 向左: LEFT 向右: RIGHT 下落: 空格 退出: ESC Alt+Enter 全屏运行 */ #include "stdio.h" #include "stdlib.h" #include "MySysFun\keyfun.c" #include "Data.c" #define BLOCK_WID 16 #define BLOCK_HGT 4 #define BLOCK_MODE 4 #define BLOCK_COUNT 7 #define SCR_X -2 + 10 /*界面从X坐标1开始,左边3个不用显示,-3+1=-2*/ #define SCR_Y -2 + 5 /*界面从Y坐标1开始,上边3个不用显示,-3+1=-2*/ #define PIC_TILE 176 #define PIC_BACK 219 #define MAX_SPEED 10 typedef unsigned char U8; typedef unsigned int U16; typedef unsigned long U32; /******************************************************************************/ /* 函数声明 */ U8 GameMain(); /*游戏主函数*/ U8 RenovateMap(U8 y); /*更新地图*/ U8 CheckMove(U8 y, U8 idx); /*检测是否可移动*/ void GameInit(); /*游戏初始化*/ void CopyData(U8 id); /*复制原始方块数据到当前方块数据*/ void DataToMap(U8 y, U8 idx); /*将方块数据Copy到地图上*/ void MoveRight(); /*方块左移*/ void MoveLeft(); /*方块右移*/ void BlockDown(); /*方块下移*/ void BlockRotate(); /*方块转动*/ void BlockLeft(); /*方块数据右移*/ void BlockRight(); /*方块数据左移*/ void DrawTile(U8 x, U8 y); /*绘单元方块*/ void DrawBack(U8 x, U8 y); /*绘单元背景*/ void ShowNext(); /*显示下一个方块*/ void ShowScore(); /*显示积分*/ void ShowMap(); /*显示背景*/ void ShowBlock(U8 y, U8 idx); /*显示方块*/ void EraseBlock(U8 y, U8 idx); /*清除方块*/ void ShowSpeed(); /*显示速度*/ void ScoreAdd(U32 n); /*增加积分*/ /******************************************************************************/ /* 变量声明 */ U8 gameEvent; /*游戏事件 1正在运行 0未运行*/ U8 g_higt; /*活动方块所在高度*/ U8 g_step; /*活动方块状态*/ U16 block[BLOCK_MODE][BLOCK_HGT]; /*活动方块数据*/ U16 map[24]; /*地图数据*/ U32 score; /*游戏得分*/ U8 next; /*下一个方块ID*/ U32 tick; /*游戏速度计时变量*/ U32 speed; /*游戏速度*/ U32 keyTick; /*按键速度计时变量*/ U32 keySpeed; /*按键速度*/ /******************************************************************************/ main() { InstallKeyboard(); GameInit(); /*游戏初始化界面*/ clrscr(); gotoxy(SCR_X + 3 + 5, SCR_Y); printf("Tetris"); gotoxy(SCR_X + 3 + 12, SCR_Y + 15); printf("UP: Rotate"); gotoxy(SCR_X + 3 + 12, SCR_Y + 16); printf("DOWN: Down"); gotoxy(SCR_X + 3 + 12, SCR_Y + 17); printf("LEFT: Left"); gotoxy(SCR_X + 3 + 12, SCR_Y + 18); printf("RIGHT: Right"); gotoxy(SCR_X + 3 + 12, SCR_Y + 19); printf("SPACE: ShutDown"); gotoxy(SCR_X + 3 + 12, SCR_Y + 20); printf("ESC: Exit"); ShowMap(); ShowBlock(g_higt, g_step); ShowNext(); ShowScore(); ShowSpeed(); /***************/ GameMain(); } void GameInit() { U8 i; for(i = 0; i < 23; i++) map[i] = 0xE007; map[23] = 0xFFFF; /*gam_srand(SysGetSecond());*/ randomize(); CopyData(rand() % BLOCK_COUNT); next = rand() % BLOCK_COUNT; g_higt = 0; g_step = 0; score = 0; speed = MAX_SPEED; keySpeed = 1; } U8 GameMain() { gameEvent = 1; while(gameEvent) { if(clock() - tick > speed) { EraseBlock(g_higt, g_step); BlockDown(); ShowBlock(g_higt, g_step); tick = clock(); } if(clock() - keyTick > keySpeed) { if(KeyPress(KEY_LEFT)) { EraseBlock(g_higt, g_step); BlockLeft(); ShowBlock(g_higt, g_step); } else if(KeyPress(KEY_RIGHT)) { EraseBlock(g_higt, g_step); BlockRight(); ShowBlock(g_higt, g_step); } else if(KeyPress(KEY_SPACE)) { EraseBlock(g_higt, g_step); while( ! CheckMove(g_higt + 1, g_step) ) g_higt += 1; BlockDown(); ShowBlock(g_higt, g_step); } else if(KeyPress(KEY_UP)) { EraseBlock(g_higt, g_step); BlockRotate(); ShowBlock(g_higt, g_step); } else if(KeyPress(KEY_DOWN)) { EraseBlock(g_higt, g_step); BlockDown(); ShowBlock(g_higt, g_step); } else if(KeyPress(KEY_ESC)) gameEvent = 0; keyTick = clock(); } } } /*1 不能移动 0 能移动*/ U8 CheckMove(U8 y, U8 idx) { char i; for(i = BLOCK_HGT - 1; i >= 0; i--) if( (map[y+i] & block[idx][i]) != 0) return 1; return 0; } void CopyData(U8 id) { U8 i,p; for(i = 0; i < BLOCK_MODE; i++) for(p = 0; p < BLOCK_HGT; p++) block[i][p] = data[id][i][p]; } void MoveLeft() { U8 i,p; for(i = 0; i < BLOCK_MODE; i++) for(p = 0; p < BLOCK_HGT; p++) block[i][p] = block[i][p]<<1; } void MoveRight() { U8 i,p; for(i = 0; i < BLOCK_MODE; i++) for(p = 0; p < BLOCK_HGT; p++) block[i][p] = block[i][p]>>1; } /*将方块数据拷贝到地图数据上*/ void DataToMap(U8 y, U8 idx) { U8 i; for(i = 0; i < BLOCK_HGT; i++) map[y + i] |= block[idx][i]; } void BlockRotate() { if( ! CheckMove(g_higt, g_step+1>3?0:g_step+1)) g_step = g_step+1 > 3 ? 0 : g_step + 1; else { MoveRight(); if( !CheckMove(g_higt, g_step+1>3?0:g_step+1)) g_step = g_step+1 > 3 ? 0 : g_step + 1; else MoveLeft(); } } void BlockLeft() { MoveLeft(); if(CheckMove(g_higt, g_step)) MoveRight(); } void BlockRight() { MoveRight(); if(CheckMove(g_higt, g_step)) MoveLeft(); } void BlockDown() { U8 t; if(CheckMove(g_higt+1, g_step)) { DataToMap(g_higt, g_step); t = RenovateMap(g_higt); if(t) { ShowMap(); ScoreAdd(t); ShowSpeed(); } else ShowBlock(g_higt, g_step); g_higt = 0; g_step = 0; CopyData(next); next = rand() % BLOCK_COUNT; ShowNext(); ShowScore(); if(CheckMove(1, g_step)) { gameEvent = 0; } } else { g_higt
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...