⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sprites.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "sprites.h"#include <qcanvas.h>#include <qimage.h>#include <qtopia/resource.h>// Might want to make this a menu option,// e.g, pick your snake size, (label with images of snakes head + tail)// can smoothscale 3/4 very nicely with medium snake, giving sizes of// 8, 12, 16// might be possible to do the smallsnake down to 4,  (increments of 4 make more sense)// Warning though, the code is not currently set up for this to be a dynamic change.#ifdef QTOPIA_PHONEint SpriteDB::tilesize = 8;const QCString tilename = "snake/smallsnake";#elseint SpriteDB::tilesize = 16;const QCString tilename = "snake/mediumsnake";#endifQCanvasPixmapArray *SpriteDB::internalcache = 0;// left, right, up, downstatic int headKey[4] = { 0, 1, 3, 2 };static int bodyKey[4][4] = { {8, 8, 12, 10}, {8, 8, 13, 11}, { 11, 10, 9, 9 }, {13, 12, 9, 9 } };static int tailKey[4] = { 4, 5, 6, 7 };// left = 1, right = 2, up = 4, down = 8, maskstatic int wallKey[16] = {    27, // 0x00, null    15, // 0x01, left    14, // 0x02, right    29, // 0x03, left, right    17, // 0x04, up    21, // 0x05, up left    18, // 0x06, up right    25, // 0x07, up left right    16, // 0x08, down    19, // 0x09, down left    20, // 0x0A, down right    24, // 0x0B, down left right    28, // 0x0C, down up    23, // 0x0D, down up left    22, // 0x0E, down up right    26  // 0x0F, down up right left};QCanvasPixmapArray *SpriteDB::spriteCache(){    if (!internalcache) {    //QList<QPixmap> pixl;    //pixl.append(&borderPix);//    //QPoint nullp;    //QList<QPoint> pl;    //pl.append(&nullp);   //    //QCanvasPixmapArray* borderarray = new QCanvasPixmapArray(pixl, pl);	QCanvasPixmapArray *parts = new QCanvasPixmapArray();	QImage image = Resource::findPixmap(tilename);	if (!image.valid(tilesize*2-1,tilesize*7-1)) {	    qWarning("couldn't find image");	    return 0;	}	int x = 0;	int y = 0;		//snake..	int i = 0;	for (; i < 14; ++i) {	    parts->setImage( i, new QCanvasPixmap(image.copy(x, y, tilesize, tilesize)) );	    if (i % 2) {		x = 0;		y += tilesize;	    } else {		x = tilesize;	    }	}	x = 2*tilesize;	y = 0;	for (; i < 30; ++i) {	    parts->setImage( i, new QCanvasPixmap(image.copy(x, y, tilesize, tilesize)) );	    if (i % 2) {		x = 2*tilesize;		y += tilesize;	    } else {		x = 3*tilesize;	    }	}	parts->setImage(i++, new QCanvasPixmap(image.copy(0, tilesize*7, tilesize, tilesize)));	parts->setImage(i++, new QCanvasPixmap(image.copy(tilesize, tilesize*7, tilesize, tilesize)));	internalcache = parts;    }    return internalcache;}int SpriteDB::snakeHead(Direction dir){    return headKey[dir];}int SpriteDB::snakeBody(Direction olddir, Direction newdir){    return bodyKey[olddir][newdir];}int SpriteDB::snakeTail(Direction dir){    return tailKey[dir];}int SpriteDB::mouse(){    return 30;}int SpriteDB::ground(){    return 31;}int SpriteDB::wall(bool l, bool r, bool u, bool d){    int index = 0;    if (l)	index |= 0x01;    if (r)	index |= 0x02;    if (u)	index |= 0x04;    if (d)	index |= 0x08;    int res = wallKey[index];    if (res > 30 || res < 14) qWarning("index was %d", index);    return (res > 30 || res < 14) ? 29 : res;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -