mirror of
https://github.com/Ratstail91/Hearts.git
synced 2025-11-28 18:14:30 +11:00
Rearranged the project, pruned unnecessary modules
I've also put some notes into the code, for later reference. These are usually marked with "TODO".
This commit is contained in:
@@ -167,127 +167,145 @@
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
Name="Hearts"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\animation.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\audio_manager.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\base_engine.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card_list.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\deck.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\hearts_engine.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\image.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\image_manager.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\music.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\network_manager.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\object.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_ai.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_user.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sound.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\table.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\animation.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\audio_manager.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\base_engine.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card_list.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\deck.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\hearts_engine.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\table.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\table.h"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Card Systems"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\card.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card_list.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\card_list.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\deck.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\deck.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Player Systems"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\player.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_ai.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_ai.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_user.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_user.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="-Notes"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Notes\Outline.txt"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Notes\TODO.txt"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="KAGE"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\audio_manager.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\audio_manager.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\base_engine.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\base_engine.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\image.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\image.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\image_manager.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\image_manager.h"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\music.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\music.h"
|
||||
@@ -298,47 +316,13 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\network_manager.h"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\object.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_ai.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\player_user.h"
|
||||
RelativePath=".\sound.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sound.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\table.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
/* File Name: animation.cpp
|
||||
* Copyright: (c) Kayne Ruse, all rights reserved.
|
||||
* Author: Kayne Ruse
|
||||
* Date: 9/7/2011
|
||||
* Version: 1, Stable
|
||||
* Description: The Animation class, animates spritesheets.
|
||||
* Part of the KAGE Game Engine.
|
||||
*/
|
||||
#include "animation.h"
|
||||
using namespace KAGE;
|
||||
|
||||
//-------------------------
|
||||
//Public access members
|
||||
//-------------------------
|
||||
|
||||
Animation::Animation(int _stateCount, int _frameCount, float _speed) {
|
||||
stateCount = _stateCount;
|
||||
frameCount = _frameCount;
|
||||
state = 0;
|
||||
frame = 0;
|
||||
speed = _speed;
|
||||
}
|
||||
|
||||
void Animation::Process(int delta) {
|
||||
frame += delta * speed + speed;
|
||||
|
||||
if (frame >= frameCount)
|
||||
frame = 0;
|
||||
|
||||
SetCell();
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//Accessors and mutators
|
||||
//-------------------------
|
||||
|
||||
int Animation::SetStateCount(int _stateCount) {
|
||||
frame = 0;
|
||||
return stateCount = _stateCount;
|
||||
}
|
||||
|
||||
int Animation::SetFrameCount(int _frameCount) {
|
||||
frame = 0;
|
||||
return frameCount = _frameCount;
|
||||
}
|
||||
|
||||
int Animation::SetState(int _state) {
|
||||
if (_state >= stateCount)
|
||||
return -1;
|
||||
|
||||
frame = 0;
|
||||
return state = _state;
|
||||
}
|
||||
|
||||
float Animation::SetFrame(float _frame) {
|
||||
if (_frame >= frameCount)
|
||||
return -1;
|
||||
|
||||
return frame = _frame;
|
||||
}
|
||||
|
||||
float Animation::SetSpeed(float _speed) {
|
||||
frame = 0;
|
||||
return speed = _speed;
|
||||
}
|
||||
|
||||
int Animation::GetStateCount() {
|
||||
return stateCount;
|
||||
}
|
||||
|
||||
int Animation::GetFrameCount() {
|
||||
return frameCount;
|
||||
}
|
||||
|
||||
int Animation::GetState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
float Animation::GetFrame() {
|
||||
return frame;
|
||||
}
|
||||
|
||||
float Animation::GetSpeed() {
|
||||
return speed;
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
/* File Name: animation.h
|
||||
* Copyright: (c) Kayne Ruse, all rights reserved.
|
||||
* Author: Kayne Ruse
|
||||
* Date: 9/7/2011
|
||||
* Version: 1, Stable
|
||||
* Description: The Animation class, animates spritesheets.
|
||||
* Part of the KAGE Game Engine.
|
||||
*/
|
||||
#ifndef KR_KAGE_ANIMATION_H_
|
||||
#define KR_KAGE_ANIMATION_H_
|
||||
|
||||
/* Version information */
|
||||
#define ANIMATION_VERSION_MAJOR 1
|
||||
#define ANIMATION_VERSION_MINOR 0
|
||||
#define ANIMATION_VERSION_PATCH 0
|
||||
#define ANIMATION_VERSION "1.0.0"
|
||||
#define ANIMATION_VERSION_STRING "KAGE::Animation Version 1.0.0, Stable"
|
||||
|
||||
namespace KAGE {
|
||||
class Animation {
|
||||
public:
|
||||
/* Public access members */
|
||||
Animation(int stateCount, int frameCount, float speed = 0);
|
||||
|
||||
virtual void Process(int delta);
|
||||
|
||||
/* Accessors and mutators */
|
||||
virtual int SetStateCount (int stateCount);
|
||||
virtual int SetFrameCount (int frameCount);
|
||||
|
||||
virtual int SetState (int state);
|
||||
virtual float SetFrame (float frame);
|
||||
virtual float SetSpeed (float speed);
|
||||
|
||||
virtual int GetStateCount ();
|
||||
virtual int GetFrameCount ();
|
||||
|
||||
virtual int GetState ();
|
||||
virtual float GetFrame ();
|
||||
virtual float GetSpeed ();
|
||||
protected:
|
||||
/* Protected access members */
|
||||
virtual void SetCell()=0;
|
||||
private:
|
||||
/* Private access members */
|
||||
int stateCount;
|
||||
int frameCount;
|
||||
|
||||
int state;
|
||||
float frame;
|
||||
float speed;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -62,8 +62,8 @@ protected:
|
||||
const int suit;
|
||||
const int rank;
|
||||
|
||||
int face;
|
||||
SDL_Surface* faceSurface;
|
||||
int face; //TODO: "facestate"
|
||||
SDL_Surface* faceSurface; //TODO: Image
|
||||
SDL_Surface* backSurface;
|
||||
|
||||
Card* next;
|
||||
|
||||
@@ -140,7 +140,7 @@ Card* CardList::PassSlab(int first, int count) {
|
||||
|
||||
void CardList::Shuffle() {
|
||||
//New version
|
||||
srand((unsigned int)time(NULL));
|
||||
srand((unsigned int)time(NULL)); //TODO: Remove this, initiate randomization in the Scene (and shuffle 3 times ;) )
|
||||
iterator shuffleHead = NULL;
|
||||
iterator prev = NULL;
|
||||
|
||||
|
||||
@@ -45,14 +45,14 @@ private:
|
||||
KAGE::ImageManager mImage;
|
||||
KAGE::AudioManager mAudio;
|
||||
|
||||
/* Game phase members */
|
||||
/* Game phase members */ //TODO: "phases"
|
||||
void SetupPhase();
|
||||
void SwapPhase();
|
||||
void TrickPhase();
|
||||
void ScorePhase();
|
||||
void CleanupPhase();
|
||||
|
||||
/* Play phase members */
|
||||
/* Play phase members */ //TODO: "steps"
|
||||
void PlayBeforePhase();
|
||||
void PlayPlayerPhase();
|
||||
void PlayAfterPhase();
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
/* File Name: network_manager.cpp
|
||||
* Copyright: (c) Kayne Ruse, all rights reserved.
|
||||
* Author: Kayne Ruse
|
||||
* Date: 21/6/2011
|
||||
* Version: 3, Stable
|
||||
* Description: The Network Manager deals with the networking for your game.
|
||||
* Part of the KAGE Game Engine.
|
||||
*/
|
||||
#include <iostream>
|
||||
#include "network_manager.h"
|
||||
using namespace std;
|
||||
using namespace KAGE;
|
||||
|
||||
//-------------------------
|
||||
//Public access members
|
||||
//-------------------------
|
||||
|
||||
NetworkManager::~NetworkManager() {
|
||||
SDLNet_FreePacket(packet);
|
||||
SDLNet_Quit();
|
||||
}
|
||||
|
||||
int NetworkManager::Init(int port, int packetSize) {
|
||||
if (SDLNet_Init() != 0) {
|
||||
cout << "Error in NetworkManager::Init()" << endl;
|
||||
cout << "Failed to initialise SDL_net" << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
packet = SDLNet_AllocPacket(packetSize);
|
||||
if (packet == NULL) {
|
||||
cout << "Error in NetworkManager::Init()" << endl;
|
||||
cout << "SDLNet_AllocPacket() returned NULL" << endl;
|
||||
cout << "packetSize: " << packetSize << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
socket = SDLNet_UDP_Open(port);
|
||||
if (socket == NULL) {
|
||||
cout << "Error in NetworkManager::Init()" << endl;
|
||||
cout << "SDLNet_UDP_Open() returned NULL" << endl;
|
||||
cout << "port: " << port << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
IPaddress* NetworkManager::Add(const char* name, char* ip, int port) {
|
||||
if (Exists(name)) {
|
||||
cout << "Error in NetworkManager::Add()" << endl;
|
||||
cout << "An IPaddress of that name already exists" << endl;
|
||||
cout << "name: " << name << endl;
|
||||
cout << "ip: " << ip << endl;
|
||||
cout << "port: " << port << endl;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
IPaddress* add = new IPaddress;
|
||||
|
||||
if (SDLNet_ResolveHost(add,ip,port) != 0) {
|
||||
cout << "Error in NetworkManager::Add(name,ip,port)" << endl;
|
||||
cout << "Failed to resolve an IPaddress" << endl;
|
||||
cout << "name: " << name << endl;
|
||||
cout << "ip: " << ip << endl;
|
||||
cout << "port: " << port << endl;
|
||||
delete add;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NamedManager::Add(name,add);
|
||||
}
|
||||
|
||||
IPaddress* NetworkManager::Add(const char* name, IPaddress* address) {
|
||||
if (Exists(name)) {
|
||||
cout << "Error in NetworkManager::Add()" << endl;
|
||||
cout << "An IPaddress of that name already exists" << endl;
|
||||
cout << "name: " << name << endl;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NamedManager::Add(name,address);
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//Network members
|
||||
//-------------------------
|
||||
int NetworkManager::Send(const char* name, const char* data) {
|
||||
IPaddress* add = Get(name);
|
||||
if (add == NULL) {
|
||||
cout << "Error in NetworkManager::Send(name,data)" << endl;
|
||||
cout << "No such IPaddress with that name" << endl;
|
||||
cout << "name: " << name << endl;
|
||||
return -2;
|
||||
}
|
||||
|
||||
return Send(add,data);
|
||||
}
|
||||
|
||||
int NetworkManager::Send(IPaddress* address, const char* data) {
|
||||
//send this data to the address
|
||||
strcpy_s((char*)packet->data,512,data);
|
||||
packet->address = *address;
|
||||
|
||||
packet->len = strlen((char*)packet->data) + 1;
|
||||
SDLNet_UDP_Send(socket,-1,packet);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int NetworkManager::Send(char* ip, int port, const char* data) {
|
||||
IPaddress* add = new IPaddress;
|
||||
|
||||
if (SDLNet_ResolveHost(add,ip,port) != 0) {
|
||||
cout << "Error in NetworkManager::Send(ip,port,data)" << endl;
|
||||
cout << "Failed to resolve an IPaddress" << endl;
|
||||
cout << "ip: " << ip << endl;
|
||||
cout << "port: " << port << endl;
|
||||
cout << "data: " << data << endl;
|
||||
delete add;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ret = Send(add,data);
|
||||
delete add;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void NetworkManager::SendAll(const char* data) {
|
||||
for (MapType::iterator it = mapList.begin(); it != mapList.end(); it++)
|
||||
Send(it->second,data);
|
||||
}
|
||||
|
||||
int NetworkManager::Receive() {
|
||||
return SDLNet_UDP_Recv(socket, packet);
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//Accessors and mutators
|
||||
//-------------------------
|
||||
|
||||
const char* NetworkManager::Data() {
|
||||
return (char*)packet->data;
|
||||
}
|
||||
|
||||
bool NetworkManager::CheckData(const char* str) {
|
||||
return !strcmp((char*)packet->data,str);
|
||||
}
|
||||
|
||||
bool NetworkManager::CheckData(const char* str, int num) {
|
||||
return !strncmp((char*)packet->data,str,num);
|
||||
}
|
||||
|
||||
UDPpacket* NetworkManager::Packet() {
|
||||
return packet;
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
/* File Name: network_manager.h
|
||||
* Copyright: (c) Kayne Ruse, all rights reserved.
|
||||
* Author: Kayne Ruse
|
||||
* Date: 21/6/2011
|
||||
* Version: 3, Stable
|
||||
* Description: The Network Manager deals with the networking for your game.
|
||||
* Part of the KAGE Game Engine.
|
||||
*/
|
||||
#ifndef KR_KAGE_NETWORKMANAGER_H_
|
||||
#define KR_KAGE_NETWORKMANAGER_H_
|
||||
|
||||
/* Version information */
|
||||
#define NETWORKMANAGER_VERSION_MAJOR 3
|
||||
#define NETWORKMANAGER_VERSION_MINOR 0
|
||||
#define NETWORKMANAGER_VERSION_PATCH 0
|
||||
#define NETWORKMANAGER_VERSION "3.0.0"
|
||||
#define NETWORKMANAGER_VERSION_STRING "KAGE::NetworkManager Version 3, Stable"
|
||||
|
||||
#include "SDL_net.h"
|
||||
#include "named_manager.h"
|
||||
|
||||
namespace KAGE {
|
||||
class NetworkManager : public NamedManager<IPaddress> {
|
||||
public:
|
||||
/* Public access members */
|
||||
~NetworkManager();
|
||||
|
||||
int Init(int port, int packetSize = 512);
|
||||
|
||||
IPaddress* Add(const char* name, char* ip, int port);
|
||||
IPaddress* Add(const char* name, IPaddress* address);
|
||||
|
||||
/* Network members */
|
||||
int Send(const char* name, const char* data);
|
||||
int Send(IPaddress* address, const char* data);
|
||||
int Send(char* ip, int port, const char* data);
|
||||
void SendAll(const char* data);
|
||||
int Receive();
|
||||
|
||||
/* Accessors and mutators */
|
||||
const char* Data();
|
||||
bool CheckData(const char* str);
|
||||
bool CheckData(const char* str, int num);
|
||||
UDPpacket* Packet();
|
||||
|
||||
/* Private access members */
|
||||
UDPsocket socket;
|
||||
UDPpacket* packet;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,197 +0,0 @@
|
||||
/* File Name: object.cpp
|
||||
* Copyright: (c) Kayne Ruse, all rights reserved.
|
||||
* Author: Kayne Ruse
|
||||
* Date: 9/7/2011
|
||||
* Version: 4, Stable
|
||||
* Description: The Object class, with movement and collision functionality.
|
||||
* Part of the KAGE Game Engine.
|
||||
*/
|
||||
#include <iostream>
|
||||
#include "object.h"
|
||||
using namespace std;
|
||||
using namespace KAGE;
|
||||
|
||||
//-------------------------
|
||||
//Public access members
|
||||
//-------------------------
|
||||
|
||||
Object::Object(float _realX, float _realY, int boxX, int boxY, int boxWidth, int boxHeight, float _radius) {
|
||||
realX = _realX;
|
||||
realY = _realY;
|
||||
motionX = 0;
|
||||
motionY = 0;
|
||||
boundingBox.x = boxX;
|
||||
boundingBox.y = boxY;
|
||||
boundingBox.w = boxWidth;
|
||||
boundingBox.h = boxHeight;
|
||||
radius = _radius;
|
||||
}
|
||||
|
||||
void Object::Process(int delta) {
|
||||
realX += delta * motionX + motionX;
|
||||
realY += delta * motionY + motionY;
|
||||
UpdateClip();
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//Accessors and mutators
|
||||
//-------------------------
|
||||
|
||||
void Object::SetPosition(float _realX, float _realY) {
|
||||
realX = _realX;
|
||||
realY = _realY;
|
||||
UpdateClip();
|
||||
}
|
||||
|
||||
void Object::ShiftPosition(float _realX, float _realY) {
|
||||
realX += _realX;
|
||||
realY += _realY;
|
||||
UpdateClip();
|
||||
}
|
||||
|
||||
float Object::SetRealX(float _realX) {
|
||||
realX = _realX;
|
||||
UpdateClip();
|
||||
return realX;
|
||||
}
|
||||
|
||||
float Object::SetRealY(float _realY) {
|
||||
realY = _realY;
|
||||
UpdateClip();
|
||||
return realY;
|
||||
}
|
||||
|
||||
float Object::GetRealX() {
|
||||
return realX;
|
||||
}
|
||||
|
||||
float Object::GetRealY() {
|
||||
return realY;
|
||||
}
|
||||
|
||||
void Object::SetMotion(float _motionX, float _motionY) {
|
||||
motionX = _motionX;
|
||||
motionY = _motionY;
|
||||
}
|
||||
|
||||
float Object::SetMotionX(float _motionX) {
|
||||
return motionX = _motionX;
|
||||
}
|
||||
|
||||
float Object::SetMotionY(float _motionY) {
|
||||
return motionY = _motionY;
|
||||
}
|
||||
|
||||
void Object::ShiftMotion(float _motionX, float _motionY) {
|
||||
motionX += _motionX;
|
||||
motionY += _motionY;
|
||||
}
|
||||
|
||||
float Object::ShiftMotionX(float _motionX) {
|
||||
return motionX += _motionX;
|
||||
}
|
||||
|
||||
float Object::ShiftMotionY(float _motionY) {
|
||||
return motionY += _motionY;
|
||||
}
|
||||
|
||||
void Object::StopMotion() {
|
||||
motionX = 0;
|
||||
motionY = 0;
|
||||
}
|
||||
|
||||
float Object::GetMotionX() {
|
||||
return motionX;
|
||||
}
|
||||
|
||||
float Object::GetMotionY() {
|
||||
return motionY;
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//Collision code
|
||||
//-------------------------
|
||||
|
||||
SDL_Rect Object::SetBoundingBox(int x, int y, int w, int h) {
|
||||
boundingBox.x = x;
|
||||
boundingBox.y = y;
|
||||
boundingBox.w = w;
|
||||
boundingBox.h = h;
|
||||
return boundingBox;
|
||||
}
|
||||
|
||||
SDL_Rect Object::SetBoundingBox(SDL_Rect _boundingBox) {
|
||||
return boundingBox = _boundingBox;
|
||||
}
|
||||
|
||||
float Object::SetRadius(float _radius) {
|
||||
return radius = _radius;
|
||||
}
|
||||
|
||||
SDL_Rect* Object::GetBoundingBox() {
|
||||
return &boundingBox;
|
||||
}
|
||||
|
||||
SDL_Rect Object::GetWorldBoundingBox() {
|
||||
SDL_Rect ret = boundingBox;
|
||||
ret.x += (Sint16)realX;
|
||||
ret.y += (Sint16)realY;
|
||||
ret.w += (Uint16)realX;
|
||||
ret.h += (Uint16)realY;
|
||||
return ret;
|
||||
}
|
||||
|
||||
float Object::GetRadius() {
|
||||
return radius;
|
||||
}
|
||||
|
||||
bool Object::CheckWorldBoundingBox(SDL_Rect arg) {
|
||||
if (radius > 0) {
|
||||
cout << "Error in Object::CheckWorldBoundingBox()" << endl;
|
||||
cout << "Wrong collision type" << endl;
|
||||
cout << "radius: " << radius << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
SDL_Rect box = GetWorldBoundingBox();
|
||||
if ((int)arg.x < (int)box.w &&
|
||||
(int)arg.w > (int)box.x &&
|
||||
(int)arg.y < (int)box.h &&
|
||||
(int)arg.h > (int)box.y)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
inline float sqr(float f) {
|
||||
return f*f;
|
||||
}
|
||||
|
||||
bool Object::CheckRadius(float _realX, float _realY, float _radius) {
|
||||
if (radius <= 0) {
|
||||
cout << "Error in Object::CheckRadius()" << endl;
|
||||
cout << "Wrong collision type" << endl;
|
||||
cout << "radius: " << radius << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sqr(radius + _radius) > sqr(realX - _realX) + sqr(realY - _realY))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Object::CheckPoint(float _realX, float _realY) {
|
||||
if (radius > 0) {
|
||||
cout << "Error in Object::CheckPoint()" << endl;
|
||||
cout << "Wrong collision type" << endl;
|
||||
cout << "radius: " << radius << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
SDL_Rect box = GetWorldBoundingBox();
|
||||
if ((int)box.x < (int)_realX &&
|
||||
(int)box.y < (int)_realY &&
|
||||
(int)box.w > (int)_realX &&
|
||||
(int)box.h > (int)_realY)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
/* File Name: object.h
|
||||
* Copyright: (c) Kayne Ruse, all rights reserved.
|
||||
* Author: Kayne Ruse
|
||||
* Date: 9/7/2011
|
||||
* Version: 4, Stable
|
||||
* Description: The Object class, with movement and collision functionality.
|
||||
* Part of the KAGE Game Engine.
|
||||
*/
|
||||
#ifndef KR_KAGE_OBJECT_H_
|
||||
#define KR_KAGE_OBJECT_H_
|
||||
|
||||
/* Version information */
|
||||
#define OBJECT_VERSION_MAJOR 4
|
||||
#define OBJECT_VERSION_MINOR 0
|
||||
#define OBJECT_VERSION_PATCH 0
|
||||
#define OBJECT_VERSION "4.0.0"
|
||||
#define OBJECT_VERSION_STRING "KAGE::Object Version 4, Stable"
|
||||
|
||||
#include "SDL.h"
|
||||
|
||||
namespace KAGE {
|
||||
class Object {
|
||||
public:
|
||||
/* Public access members */
|
||||
Object(float realX = 0, float realY = 0, int boxX = 0, int boxY = 0, int boxWidth = 0, int boxHeight = 0, float radius = 0);
|
||||
|
||||
virtual void Process(int delta);
|
||||
|
||||
/* Accessors and mutators */
|
||||
virtual void SetPosition (float realX, float realY);
|
||||
virtual void ShiftPosition (float realX, float realY);
|
||||
virtual float SetRealX (float realX);
|
||||
virtual float SetRealY (float realY);
|
||||
|
||||
virtual float GetRealX ();
|
||||
virtual float GetRealY ();
|
||||
|
||||
virtual void SetMotion (float motionX, float motionY);
|
||||
virtual float SetMotionX (float motionX);
|
||||
virtual float SetMotionY (float motionY);
|
||||
|
||||
virtual void ShiftMotion (float motionX, float motionY);
|
||||
virtual float ShiftMotionX (float motionX);
|
||||
virtual float ShiftMotionY (float motionY);
|
||||
|
||||
virtual void StopMotion ();
|
||||
|
||||
virtual float GetMotionX ();
|
||||
virtual float GetMotionY ();
|
||||
|
||||
/* Collision code */
|
||||
virtual SDL_Rect SetBoundingBox (int x, int y, int w, int h);
|
||||
virtual SDL_Rect SetBoundingBox (SDL_Rect boundingBox);
|
||||
virtual float SetRadius (float radius);
|
||||
|
||||
virtual SDL_Rect* GetBoundingBox ();
|
||||
virtual SDL_Rect GetWorldBoundingBox ();
|
||||
virtual float GetRadius ();
|
||||
|
||||
virtual bool CheckWorldBoundingBox (SDL_Rect boundingBox);
|
||||
virtual bool CheckRadius (float realX, float realY, float radius = 0);
|
||||
virtual bool CheckPoint (float realX, float realY);
|
||||
protected:
|
||||
/* Protected access members */
|
||||
virtual void UpdateClip()=0;
|
||||
private:
|
||||
/* Private access members */
|
||||
float realX;
|
||||
float realY;
|
||||
float motionX;
|
||||
float motionY;
|
||||
|
||||
SDL_Rect boundingBox;
|
||||
float radius;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -120,6 +120,7 @@ void Player::SetHandPositions() {
|
||||
}
|
||||
|
||||
void Player::SetTrickPositions() {
|
||||
//Sorts out the cards won from tricks for display at the end of the round
|
||||
int x = posX, y = posY;
|
||||
|
||||
tricks.Sort();
|
||||
@@ -139,6 +140,7 @@ void Player::DrawHand(SDL_Surface* dest) {
|
||||
}
|
||||
|
||||
void Player::DrawTricks(SDL_Surface* dest) {
|
||||
//draws the cards won from tricks at the end of the round
|
||||
tricks.Sort();
|
||||
|
||||
for (int i = 0; i < tricks.Size(); i++) {
|
||||
@@ -153,6 +155,7 @@ void Player::DrawTricks(SDL_Surface* dest) {
|
||||
//-------------------------
|
||||
|
||||
void Player::AddSwapCards(int card) {
|
||||
//highlight a card
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (swapCards[i] == -1) {
|
||||
swapCards[i] = card;
|
||||
@@ -162,6 +165,7 @@ void Player::AddSwapCards(int card) {
|
||||
}
|
||||
|
||||
bool Player::CheckSwapCards(int card) {
|
||||
//if a card has been highlighted
|
||||
for (int i = 0; i < 3; i++)
|
||||
if (card == swapCards[i])
|
||||
return true;
|
||||
@@ -169,6 +173,7 @@ bool Player::CheckSwapCards(int card) {
|
||||
}
|
||||
|
||||
bool Player::CheckSwapCards() {
|
||||
//check if three cards have been highlighted
|
||||
for (int i = 0; i < 3; i++)
|
||||
if (swapCards[i] == -1)
|
||||
return false;
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
CardList* Hand();
|
||||
CardList* Tricks();
|
||||
|
||||
/* Score members */
|
||||
/* Score members */ //TODO: not good.
|
||||
int Score(int score = 0);
|
||||
int Wins(int wins = 0);
|
||||
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
|
||||
bool CheckSwapCards();
|
||||
protected:
|
||||
/* Swapping members */
|
||||
/* Swapping members */ //TODO: raname to the "highlight" system
|
||||
void AddSwapCards(int);
|
||||
bool CheckSwapCards(int);
|
||||
void RemoveSwapCards(int);
|
||||
|
||||
@@ -73,6 +73,10 @@ Card* PlayerAI::PassPlayFirstTrick(int leadingSuit) {
|
||||
if (Hand()->Read(i)->Suit() == leadingSuit)
|
||||
return Hand()->Pass(i);
|
||||
|
||||
/* bug: it's possible that if every penalty card is initially dealt the the AI, it'll break
|
||||
* Solution: Always shuffle first.
|
||||
*/
|
||||
|
||||
//can't follow suit, no penalty cards
|
||||
Hand()->SortRank();
|
||||
Card* c = NULL;
|
||||
|
||||
Reference in New Issue
Block a user