initial commit
Signed-off-by: Peter Siegmund <mars3142@noreply.mars3142.dev>
This commit is contained in:
247
libs/wxWidgets-3.3.1/demos/forty/Makefile.in
Normal file
247
libs/wxWidgets-3.3.1/demos/forty/Makefile.in
Normal file
@@ -0,0 +1,247 @@
|
||||
# =========================================================================
|
||||
# This makefile was generated by
|
||||
# Bakefile 0.2.13 (http://www.bakefile.org)
|
||||
# Do not modify, all changes will be overwritten!
|
||||
# =========================================================================
|
||||
|
||||
|
||||
@MAKE_SET@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
datarootdir = @datarootdir@
|
||||
INSTALL = @INSTALL@
|
||||
EXEEXT = @EXEEXT@
|
||||
WINDRES = @WINDRES@
|
||||
NM = @NM@
|
||||
BK_DEPS = @BK_DEPS@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
LIBS = @LIBS@
|
||||
LDFLAGS_GUI = @LDFLAGS_GUI@
|
||||
CXX = @CXX@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
USE_DPI_AWARE_MANIFEST = @USE_DPI_AWARE_MANIFEST@
|
||||
WX_LIB_FLAVOUR = @WX_LIB_FLAVOUR@
|
||||
TOOLKIT = @TOOLKIT@
|
||||
TOOLKIT_LOWERCASE = @TOOLKIT_LOWERCASE@
|
||||
TOOLKIT_VERSION = @TOOLKIT_VERSION@
|
||||
TOOLCHAIN_FULLNAME = @TOOLCHAIN_FULLNAME@
|
||||
EXTRALIBS = @EXTRALIBS@
|
||||
EXTRALIBS_XML = @EXTRALIBS_XML@
|
||||
EXTRALIBS_HTML = @EXTRALIBS_HTML@
|
||||
EXTRALIBS_GUI = @EXTRALIBS_GUI@
|
||||
WX_CPPFLAGS = @WX_CPPFLAGS@
|
||||
WX_CXXFLAGS = @WX_CXXFLAGS@
|
||||
WX_LDFLAGS = @WX_LDFLAGS@
|
||||
HOST_SUFFIX = @HOST_SUFFIX@
|
||||
DYLIB_RPATH_FLAG = @DYLIB_RPATH_FLAG@
|
||||
SAMPLES_CXXFLAGS = @SAMPLES_CXXFLAGS@
|
||||
wx_top_builddir = @wx_top_builddir@
|
||||
|
||||
### Variables: ###
|
||||
|
||||
DESTDIR =
|
||||
WX_RELEASE = 3.3
|
||||
WX_VERSION = $(WX_RELEASE).1
|
||||
LIBDIRNAME = $(wx_top_builddir)/lib
|
||||
FORTY_CXXFLAGS = $(WX_CPPFLAGS) -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
|
||||
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
|
||||
$(__THREAD_DEFINE_p) -I$(srcdir) $(__DLLFLAG_p) -I$(srcdir)/../../samples \
|
||||
$(WX_CXXFLAGS) $(SAMPLES_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS)
|
||||
FORTY_OBJECTS = \
|
||||
forty_forty.o \
|
||||
forty_canvas.o \
|
||||
forty_card.o \
|
||||
forty_game.o \
|
||||
forty_pile.o \
|
||||
forty_playerdg.o \
|
||||
forty_scoredg.o \
|
||||
forty_scorefil.o \
|
||||
$(__forty___win32rc)
|
||||
|
||||
### Conditionally set variables: ###
|
||||
|
||||
@COND_DEPS_TRACKING_0@CXXC = $(CXX)
|
||||
@COND_DEPS_TRACKING_1@CXXC = $(BK_DEPS) $(CXX)
|
||||
@COND_USE_GUI_0@PORTNAME = base
|
||||
@COND_USE_GUI_1@PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION)
|
||||
@COND_TOOLKIT_MAC@WXBASEPORT = _carbon
|
||||
@COND_BUILD_debug@WXDEBUGFLAG = d
|
||||
@COND_WXUNIV_1@WXUNIVNAME = univ
|
||||
@COND_MONOLITHIC_0@EXTRALIBS_FOR_BASE = $(EXTRALIBS)
|
||||
@COND_MONOLITHIC_1@EXTRALIBS_FOR_BASE = $(EXTRALIBS) \
|
||||
@COND_MONOLITHIC_1@ $(EXTRALIBS_XML) $(EXTRALIBS_GUI)
|
||||
@COND_MONOLITHIC_0@EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI)
|
||||
@COND_MONOLITHIC_1@EXTRALIBS_FOR_GUI =
|
||||
@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
|
||||
@COND_WXUNIV_1@__WXUNIV_DEFINE_p_1 = --define __WXUNIVERSAL__
|
||||
@COND_DEBUG_FLAG_0@__DEBUG_DEFINE_p = -DwxDEBUG_LEVEL=0
|
||||
@COND_DEBUG_FLAG_0@__DEBUG_DEFINE_p_1 = --define wxDEBUG_LEVEL=0
|
||||
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
|
||||
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_1 = --define wxNO_EXCEPTIONS
|
||||
@COND_USE_RTTI_0@__RTTI_DEFINE_p = -DwxNO_RTTI
|
||||
@COND_USE_RTTI_0@__RTTI_DEFINE_p_1 = --define wxNO_RTTI
|
||||
@COND_USE_THREADS_0@__THREAD_DEFINE_p = -DwxNO_THREADS
|
||||
@COND_USE_THREADS_0@__THREAD_DEFINE_p_1 = --define wxNO_THREADS
|
||||
@COND_SHARED_1@__DLLFLAG_p = -DWXUSINGDLL
|
||||
@COND_SHARED_1@__DLLFLAG_p_1 = --define WXUSINGDLL
|
||||
@COND_PLATFORM_WIN32_1@__WIN32_DPI_MANIFEST_p = \
|
||||
@COND_PLATFORM_WIN32_1@ --define \
|
||||
@COND_PLATFORM_WIN32_1@ wxUSE_DPI_AWARE_MANIFEST=$(USE_DPI_AWARE_MANIFEST)
|
||||
COND_PLATFORM_OS2_1___forty___os2_emxbindcmd = $(NM) forty$(EXEEXT) | if grep -q \
|
||||
pmwin.763 ; then emxbind -ep forty$(EXEEXT) ; fi
|
||||
@COND_PLATFORM_OS2_1@__forty___os2_emxbindcmd = $(COND_PLATFORM_OS2_1___forty___os2_emxbindcmd)
|
||||
@COND_TOOLKIT_MSW@__RCDEFDIR_p = --include-dir \
|
||||
@COND_TOOLKIT_MSW@ $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
|
||||
@COND_PLATFORM_MACOSX_1@__forty_app_Contents_PkgInfo___depname \
|
||||
@COND_PLATFORM_MACOSX_1@ = forty.app/Contents/PkgInfo
|
||||
@COND_PLATFORM_MACOSX_1@__forty_bundle___depname = forty_bundle
|
||||
@COND_TOOLKIT_MAC@____forty_BUNDLE_TGT_REF_DEP = \
|
||||
@COND_TOOLKIT_MAC@ $(__forty_app_Contents_PkgInfo___depname)
|
||||
@COND_TOOLKIT_OSX_CARBON@____forty_BUNDLE_TGT_REF_DEP \
|
||||
@COND_TOOLKIT_OSX_CARBON@ = $(__forty_app_Contents_PkgInfo___depname)
|
||||
@COND_TOOLKIT_OSX_COCOA@____forty_BUNDLE_TGT_REF_DEP \
|
||||
@COND_TOOLKIT_OSX_COCOA@ = $(__forty_app_Contents_PkgInfo___depname)
|
||||
@COND_TOOLKIT_OSX_IPHONE@____forty_BUNDLE_TGT_REF_DEP \
|
||||
@COND_TOOLKIT_OSX_IPHONE@ = $(__forty_app_Contents_PkgInfo___depname)
|
||||
@COND_TOOLKIT_COCOA@____forty_BUNDLE_TGT_REF_DEP = \
|
||||
@COND_TOOLKIT_COCOA@ $(__forty_app_Contents_PkgInfo___depname)
|
||||
COND_MONOLITHIC_0___WXLIB_HTML_p = \
|
||||
-lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_MONOLITHIC_0@__WXLIB_HTML_p = $(COND_MONOLITHIC_0___WXLIB_HTML_p)
|
||||
COND_MONOLITHIC_0___WXLIB_XML_p = \
|
||||
-lwx_base$(WXBASEPORT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_MONOLITHIC_0@__WXLIB_XML_p = $(COND_MONOLITHIC_0___WXLIB_XML_p)
|
||||
COND_MONOLITHIC_0___WXLIB_CORE_p = \
|
||||
-lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_MONOLITHIC_0@__WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p)
|
||||
COND_MONOLITHIC_0___WXLIB_BASE_p = \
|
||||
-lwx_base$(WXBASEPORT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_MONOLITHIC_0@__WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p)
|
||||
@COND_PLATFORM_WIN32_1@__forty___win32rc = forty_forty_rc.o
|
||||
COND_MONOLITHIC_1___WXLIB_MONO_p = \
|
||||
-lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p)
|
||||
@COND_MONOLITHIC_1_USE_STC_1@__LIB_SCINTILLA_IF_MONO_p \
|
||||
@COND_MONOLITHIC_1_USE_STC_1@ = $(__LIB_SCINTILLA_p)
|
||||
@COND_USE_STC_1@__LIB_SCINTILLA_p = \
|
||||
@COND_USE_STC_1@ -lwxscintilla$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_MONOLITHIC_1_USE_STC_1@__LIB_LEXILLA_IF_MONO_p = $(__LIB_LEXILLA_p)
|
||||
@COND_USE_STC_1@__LIB_LEXILLA_p = \
|
||||
@COND_USE_STC_1@ -lwxlexilla$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_USE_GUI_1_wxUSE_LIBTIFF_builtin@__LIB_TIFF_p \
|
||||
@COND_USE_GUI_1_wxUSE_LIBTIFF_builtin@ = \
|
||||
@COND_USE_GUI_1_wxUSE_LIBTIFF_builtin@ -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_USE_GUI_1_wxUSE_LIBJPEG_builtin@__LIB_JPEG_p \
|
||||
@COND_USE_GUI_1_wxUSE_LIBJPEG_builtin@ = \
|
||||
@COND_USE_GUI_1_wxUSE_LIBJPEG_builtin@ -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_USE_GUI_1_wxUSE_LIBPNG_builtin@__LIB_PNG_p \
|
||||
@COND_USE_GUI_1_wxUSE_LIBPNG_builtin@ = \
|
||||
@COND_USE_GUI_1_wxUSE_LIBPNG_builtin@ -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_USE_GUI_1_wxUSE_LIBWEBP_builtin@__LIB_WEBP_p \
|
||||
@COND_USE_GUI_1_wxUSE_LIBWEBP_builtin@ = \
|
||||
@COND_USE_GUI_1_wxUSE_LIBWEBP_builtin@ -lwxwebp$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_wxUSE_ZLIB_builtin@__LIB_ZLIB_p = \
|
||||
@COND_wxUSE_ZLIB_builtin@ -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_wxUSE_REGEX_builtin@__LIB_REGEX_p = \
|
||||
@COND_wxUSE_REGEX_builtin@ -lwxregexu$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
@COND_wxUSE_EXPAT_builtin@__LIB_EXPAT_p = \
|
||||
@COND_wxUSE_EXPAT_builtin@ -lwxexpat$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
|
||||
|
||||
### Targets: ###
|
||||
|
||||
all: forty$(EXEEXT) $(__forty_bundle___depname) data
|
||||
|
||||
install:
|
||||
|
||||
uninstall:
|
||||
|
||||
install-strip: install
|
||||
|
||||
clean:
|
||||
rm -rf ./.deps ./.pch
|
||||
rm -f ./*.o
|
||||
rm -f forty$(EXEEXT)
|
||||
rm -rf forty.app
|
||||
|
||||
distclean: clean
|
||||
rm -f config.cache config.log config.status bk-deps bk-make-pch Makefile
|
||||
|
||||
forty$(EXEEXT): $(FORTY_OBJECTS) $(__forty___win32rc)
|
||||
$(CXX) -o $@ $(FORTY_OBJECTS) -L$(LIBDIRNAME) $(DYLIB_RPATH_FLAG) $(LDFLAGS_GUI) $(LDFLAGS) $(WX_LDFLAGS) $(__WXLIB_HTML_p) $(EXTRALIBS_HTML) $(__WXLIB_XML_p) $(EXTRALIBS_XML) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_LEXILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(__LIB_WEBP_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) $(LIBS)
|
||||
$(__forty___os2_emxbindcmd)
|
||||
|
||||
@COND_PLATFORM_MACOSX_1@forty.app/Contents/PkgInfo: forty$(EXEEXT) $(top_srcdir)/src/osx/carbon/Info.plist.in $(top_srcdir)/src/osx/carbon/wxmac.icns
|
||||
@COND_PLATFORM_MACOSX_1@ mkdir -p forty.app/Contents
|
||||
@COND_PLATFORM_MACOSX_1@ mkdir -p forty.app/Contents/MacOS
|
||||
@COND_PLATFORM_MACOSX_1@ mkdir -p forty.app/Contents/Resources
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@ sed -e "s/\$${MACOSX_BUNDLE_GUI_IDENTIFIER}/org.wxwidgets.forty/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_EXECUTABLE_NAME}/forty/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_BUNDLE_NAME}/forty/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_COPYRIGHT}/Copyright 2002-2025 wxWidgets/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_BUNDLE_VERSION}/$(WX_VERSION)/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_INFO_STRING}/forty version $(WX_VERSION), (c) 2002-2025 wxWidgets/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_LONG_VERSION_STRING}/$(WX_VERSION), (c) 2002-2025 wxWidgets/" \
|
||||
@COND_PLATFORM_MACOSX_1@ -e "s/\$${MACOSX_BUNDLE_SHORT_VERSION_STRING}/$(WX_RELEASE)/" \
|
||||
@COND_PLATFORM_MACOSX_1@ $(top_srcdir)/src/osx/carbon/Info.plist.in >forty.app/Contents/Info.plist
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@ /bin/echo "APPL????" >forty.app/Contents/PkgInfo
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@ ln -f forty$(EXEEXT) forty.app/Contents/MacOS/forty
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@
|
||||
@COND_PLATFORM_MACOSX_1@ cp -f $(top_srcdir)/src/osx/carbon/wxmac.icns forty.app/Contents/Resources/wxmac.icns
|
||||
|
||||
@COND_PLATFORM_MACOSX_1@forty_bundle: $(____forty_BUNDLE_TGT_REF_DEP)
|
||||
|
||||
data:
|
||||
@mkdir -p .
|
||||
@for f in about.htm; do \
|
||||
if test ! -f ./$$f -a ! -d ./$$f ; \
|
||||
then x=yep ; \
|
||||
else x=`find $(srcdir)/$$f -newer ./$$f -print` ; \
|
||||
fi; \
|
||||
case "$$x" in ?*) \
|
||||
cp -pRf $(srcdir)/$$f . ;; \
|
||||
esac; \
|
||||
done
|
||||
|
||||
forty_forty.o: $(srcdir)/forty.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/forty.cpp
|
||||
|
||||
forty_canvas.o: $(srcdir)/canvas.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/canvas.cpp
|
||||
|
||||
forty_card.o: $(srcdir)/card.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/card.cpp
|
||||
|
||||
forty_game.o: $(srcdir)/game.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/game.cpp
|
||||
|
||||
forty_pile.o: $(srcdir)/pile.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/pile.cpp
|
||||
|
||||
forty_playerdg.o: $(srcdir)/playerdg.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/playerdg.cpp
|
||||
|
||||
forty_scoredg.o: $(srcdir)/scoredg.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/scoredg.cpp
|
||||
|
||||
forty_scorefil.o: $(srcdir)/scorefil.cpp
|
||||
$(CXXC) -c -o $@ $(FORTY_CXXFLAGS) $(srcdir)/scorefil.cpp
|
||||
|
||||
forty_forty_rc.o: $(srcdir)/forty.rc
|
||||
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) --include-dir $(srcdir) $(__DLLFLAG_p_1) $(__WIN32_DPI_MANIFEST_p) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include
|
||||
|
||||
|
||||
# Include dependency info, if present:
|
||||
@IF_GNU_MAKE@-include ./.deps/*.d
|
||||
|
||||
.PHONY: all install uninstall clean distclean forty_bundle data
|
||||
110
libs/wxWidgets-3.3.1/demos/forty/about.htm
Normal file
110
libs/wxWidgets-3.3.1/demos/forty/about.htm
Normal file
@@ -0,0 +1,110 @@
|
||||
<html>
|
||||
<body bgcolor="#FFFFFF" TEXT="#000000" VLINK="#000000" LINK="#000000" ALINK="#000000">
|
||||
|
||||
<font color="#000000">
|
||||
|
||||
<center>
|
||||
<font size=+1><b>Forty Thieves</b></font> <p>
|
||||
|
||||
a game of patience<P>
|
||||
|
||||
(c) Chris Breeze, 1998-2002
|
||||
|
||||
<p>
|
||||
|
||||
</center>
|
||||
|
||||
<P>
|
||||
|
||||
Forty Thieves is a patience game played with two full packs of
|
||||
cards. At the start of the game forty cards are dealt on the
|
||||
eight 'bases' along the top of the window. The object of the
|
||||
game is to place all the cards onto the eight 'foundations'. The
|
||||
foundations are built starting with the ace and adding cards of
|
||||
the same suit up to the king. Cards are dealt from the pack and
|
||||
placed on the discard pile. Cards may be moved from the discard
|
||||
pile or one of the bases to a base or a foundation. Only one
|
||||
card can be moved at a time. Cards can only be placed on a base
|
||||
if the top card of the base is of the same suit and is one
|
||||
higher in pip value or the base is empty e.g. the eight of
|
||||
spades can only be placed on top of the nine of spades.<P>
|
||||
|
||||
When the mouse cursor is over a card which can be moved it
|
||||
changes to the 'hand' cursor. The card can then be moved by
|
||||
double clicking the left button.<P>
|
||||
|
||||
The mouse cursor also changes to a hand when a card is dragged
|
||||
by placing the cursor over the card and holding down the left
|
||||
button. This feature can be enabled and disabled by selecting
|
||||
the 'Helping hand' option from the Edit menu.<P>
|
||||
|
||||
The 'foundations' are the eight piles of cards down the left
|
||||
side of the window. When the game starts these piles are empty.
|
||||
The object of the game is to place all the cards on the
|
||||
foundations. An ace can be placed on any empty foundation. Other
|
||||
cards can only be placed on a foundation if the top card is of
|
||||
the same suit and is one lower in pip value e.g. the three of
|
||||
clubs can be placed on the four of clubs.<P>
|
||||
|
||||
The 'bases' are the ten piles of cards along the top of the
|
||||
window. At the start of the game four cards are dealt face up on
|
||||
each of the bases. A card can be added to a base if the base is
|
||||
empty or if the top card is of the same suit and is one higher
|
||||
in pip value e.g. the queen of hearts can be placed on the king
|
||||
of hearts The top card of a base can be moved onto another base
|
||||
or a foundation.<P>
|
||||
|
||||
Cards can be only moved one at a time. The top card of the pack
|
||||
can be dealt onto discard pile by placing the mouse cursor over
|
||||
the pack and pressing the left button. The number of cards
|
||||
remaining is displayed to the right of the pack.<P>
|
||||
|
||||
Cards can be moved from the discard pile or the bases either by
|
||||
'double-clicking' or by dragging. If the left button is
|
||||
double-clicked when the mouse cursor is over a card and it can
|
||||
move to another pile, it will do so. This is a quick way of
|
||||
moving cards when their destination is unambiguous.<P>
|
||||
|
||||
A card can be dragged by placing the mouse cursor over the card
|
||||
and holding down the left button. The card will follow the mouse
|
||||
cursor until the left button is released. If the card is over a
|
||||
pile on which it can be placed it will be added to that pile,
|
||||
otherwise it will be returned to the pile from which it was
|
||||
dragged.<P>
|
||||
|
||||
One point is scored for every card that is placed on a
|
||||
foundation. Since there are two packs of 52 cards the maximum
|
||||
score is 104. A record is kept of the number of games played,
|
||||
the number of games won, the current score and the average
|
||||
score. This information is displayed at bottom right of the
|
||||
window and is stored on disk between games. A game is deemed to
|
||||
have started if the cards have been dealt and any card has been
|
||||
moved. If the game is abandoned before it is finished (i.e. by
|
||||
starting a new game or closing window) it counts as a lost game.
|
||||
New players can be added by selecting the 'Player' option from
|
||||
the Game menu. A summary of players' scores can be displayed by
|
||||
selecting the 'Scores...' option from the Game menu.<P>
|
||||
|
||||
All moves are recorded and can be undone. To undo a move select
|
||||
the undo menu item from the Edit menu. A quicker way of undoing
|
||||
is to press the right mouse button (it doesn't matter where the
|
||||
mouse cursor is). Right button undo can be enabled and disabled
|
||||
by selecting the 'Right button undo' option from the Edit menu.
|
||||
Pressing the right mouse button with the control key pressed
|
||||
re-does a previously undone move.<P>
|
||||
|
||||
An empty base or two is very useful as it gives the opportunity
|
||||
to unscramble other bases. Try not to build onto kings which
|
||||
obscure valuable cards as it will be difficult to get to them
|
||||
later. The undo facility is very useful for going back and using
|
||||
'hindsight'.<P>
|
||||
|
||||
Don't be put off if you can't win every game. I reckon winning 1
|
||||
in 10 is pretty good (winning 1 in 3 is excellent).
|
||||
|
||||
</font>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
273
libs/wxWidgets-3.3.1/demos/forty/canvas.cpp
Normal file
273
libs/wxWidgets-3.3.1/demos/forty/canvas.cpp
Normal file
@@ -0,0 +1,273 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: canvas.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "forty.h"
|
||||
#include "card.h"
|
||||
#include "game.h"
|
||||
#include "scorefil.h"
|
||||
#include "playerdg.h"
|
||||
#include "canvas.h"
|
||||
|
||||
wxBEGIN_EVENT_TABLE(FortyCanvas, wxScrolledWindow)
|
||||
EVT_MOUSE_EVENTS(FortyCanvas::OnMouseEvent)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
FortyCanvas::FortyCanvas(wxWindow* parent, const wxPoint& pos, const wxSize& size) :
|
||||
wxScrolledWindow(parent, wxID_ANY, pos, size, 0),
|
||||
m_helpingHand(true),
|
||||
m_rightBtnUndo(true),
|
||||
m_playerDialog(0),
|
||||
m_leftBtnDown(false)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
// Unfortunately the redraw logic here is incompatible with double
|
||||
// buffering under MSW, so we have to disable it. The proper solution would
|
||||
// be to rewrite this logic, as this is also required to make it work under
|
||||
// GTK/Wayland and macOS, where the game currently doesn't update its
|
||||
// display at all.
|
||||
MSWDisableComposited();
|
||||
#endif
|
||||
|
||||
SetScrollbars(0, 0, 0, 0);
|
||||
|
||||
#ifdef __WXGTK__
|
||||
m_font = wxTheFontList->FindOrCreateFont(wxFontInfo(12).Family(wxFONTFAMILY_ROMAN));
|
||||
#else
|
||||
m_font = wxTheFontList->FindOrCreateFont(wxFontInfo(10).Family(wxFONTFAMILY_SWISS));
|
||||
#endif
|
||||
SetBackgroundColour(FortyApp::BackgroundColour());
|
||||
|
||||
m_handCursor = new wxCursor(wxCURSOR_HAND);
|
||||
m_arrowCursor = new wxCursor(wxCURSOR_ARROW);
|
||||
|
||||
wxString name = wxTheApp->GetAppName();
|
||||
if ( name.empty() ) name = wxT("forty");
|
||||
m_scoreFile = new ScoreFile(name);
|
||||
m_game = new Game(0, 0, 0);
|
||||
m_game->Deal();
|
||||
}
|
||||
|
||||
|
||||
FortyCanvas::~FortyCanvas()
|
||||
{
|
||||
UpdateScores();
|
||||
delete m_game;
|
||||
delete m_scoreFile;
|
||||
delete m_handCursor;
|
||||
delete m_arrowCursor;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Write the current player's score back to the score file
|
||||
*/
|
||||
void FortyCanvas::UpdateScores()
|
||||
{
|
||||
if (!m_player.empty() && m_scoreFile && m_game)
|
||||
{
|
||||
m_scoreFile->WritePlayersScore(
|
||||
m_player,
|
||||
m_game->GetNumWins(),
|
||||
m_game->GetNumGames(),
|
||||
m_game->GetScore()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FortyCanvas::OnDraw(wxDC& dc)
|
||||
{
|
||||
dc.SetFont(* m_font);
|
||||
m_game->Redraw(dc);
|
||||
#if 0
|
||||
// if player name not set (and selection dialog is not displayed)
|
||||
// then ask the player for their name
|
||||
if (m_player.empty() && !m_playerDialog)
|
||||
{
|
||||
m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
|
||||
m_playerDialog->ShowModal();
|
||||
m_player = m_playerDialog->GetPlayersName();
|
||||
if ( !m_player.empty() )
|
||||
{
|
||||
// user entered a name - lookup their score
|
||||
int wins, games, score;
|
||||
m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
|
||||
m_game->NewPlayer(wins, games, score);
|
||||
m_game->DisplayScore(dc);
|
||||
m_playerDialog->Destroy();
|
||||
m_playerDialog = 0;
|
||||
Refresh(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// user cancelled the dialog - exit the app
|
||||
((wxFrame*)GetParent())->Close(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void FortyCanvas::ShowPlayerDialog()
|
||||
{
|
||||
// if player name not set (and selection dialog is not displayed)
|
||||
// then ask the player for their name
|
||||
if (m_player.empty() && !m_playerDialog)
|
||||
{
|
||||
m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
|
||||
m_playerDialog->ShowModal();
|
||||
m_player = m_playerDialog->GetPlayersName();
|
||||
if ( !m_player.empty() )
|
||||
{
|
||||
// user entered a name - lookup their score
|
||||
int wins, games, score;
|
||||
m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
|
||||
m_game->NewPlayer(wins, games, score);
|
||||
|
||||
wxClientDC dc(this);
|
||||
dc.SetFont(* m_font);
|
||||
m_game->DisplayScore(dc);
|
||||
m_playerDialog->Destroy();
|
||||
m_playerDialog = 0;
|
||||
Refresh(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// user cancelled the dialog - exit the app
|
||||
((wxFrame*)GetParent())->Close(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Called when the main frame is closed
|
||||
*/
|
||||
bool FortyCanvas::OnCloseCanvas()
|
||||
{
|
||||
if (m_game->InPlay() &&
|
||||
wxMessageBox(wxT("Are you sure you want to\nabandon the current game?"),
|
||||
wxT("Warning"), wxYES_NO | wxICON_QUESTION) == wxNO)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void FortyCanvas::OnMouseEvent(wxMouseEvent& event)
|
||||
{
|
||||
int mouseX = (int)event.GetX();
|
||||
int mouseY = (int)event.GetY();
|
||||
|
||||
wxClientDC dc(this);
|
||||
PrepareDC(dc);
|
||||
dc.SetFont(* m_font);
|
||||
|
||||
if (event.LeftDClick())
|
||||
{
|
||||
if (m_leftBtnDown)
|
||||
{
|
||||
m_leftBtnDown = false;
|
||||
ReleaseMouse();
|
||||
m_game->LButtonUp(dc, mouseX, mouseY);
|
||||
}
|
||||
m_game->LButtonDblClk(dc, mouseX, mouseY);
|
||||
}
|
||||
else if (event.LeftDown())
|
||||
{
|
||||
if (!m_leftBtnDown)
|
||||
{
|
||||
m_leftBtnDown = true;
|
||||
CaptureMouse();
|
||||
m_game->LButtonDown(dc, mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
else if (event.LeftUp())
|
||||
{
|
||||
if (m_leftBtnDown)
|
||||
{
|
||||
m_leftBtnDown = false;
|
||||
ReleaseMouse();
|
||||
m_game->LButtonUp(dc, mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
else if (event.RightDown() && !event.LeftIsDown())
|
||||
{
|
||||
// only allow right button undo if m_rightBtnUndo is true
|
||||
if (m_rightBtnUndo)
|
||||
{
|
||||
if (event.ControlDown() || event.ShiftDown())
|
||||
{
|
||||
m_game->Redo(dc);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_game->Undo(dc);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (event.Dragging())
|
||||
{
|
||||
m_game->MouseMove(dc, mouseX, mouseY);
|
||||
}
|
||||
|
||||
if (!event.LeftIsDown())
|
||||
{
|
||||
SetCursorStyle(mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
|
||||
void FortyCanvas::SetCursorStyle(int x, int y)
|
||||
{
|
||||
// Only set cursor to a hand if 'helping hand' is enabled and
|
||||
// the card under the cursor can go somewhere
|
||||
if (m_game->CanYouGo(x, y) && m_helpingHand)
|
||||
{
|
||||
SetCursor(* m_handCursor);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetCursor(* m_arrowCursor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void FortyCanvas::NewGame()
|
||||
{
|
||||
m_game->Deal();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void FortyCanvas::Undo()
|
||||
{
|
||||
wxClientDC dc(this);
|
||||
PrepareDC(dc);
|
||||
dc.SetFont(* m_font);
|
||||
m_game->Undo(dc);
|
||||
}
|
||||
|
||||
void FortyCanvas::Redo()
|
||||
{
|
||||
wxClientDC dc(this);
|
||||
PrepareDC(dc);
|
||||
dc.SetFont(* m_font);
|
||||
m_game->Redo(dc);
|
||||
}
|
||||
|
||||
void FortyCanvas::LayoutGame()
|
||||
{
|
||||
m_game->Layout();
|
||||
}
|
||||
56
libs/wxWidgets-3.3.1/demos/forty/canvas.h
Normal file
56
libs/wxWidgets-3.3.1/demos/forty/canvas.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: canvas.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _CANVAS_H_
|
||||
#define _CANVAS_H_
|
||||
|
||||
class Card;
|
||||
class Game;
|
||||
class ScoreFile;
|
||||
class PlayerSelectionDialog;
|
||||
|
||||
class FortyCanvas: public wxScrolledWindow
|
||||
{
|
||||
public:
|
||||
FortyCanvas(wxWindow* parent, const wxPoint& pos, const wxSize& size);
|
||||
virtual ~FortyCanvas();
|
||||
|
||||
virtual void OnDraw(wxDC& dc) override;
|
||||
bool OnCloseCanvas();
|
||||
void OnMouseEvent(wxMouseEvent& event);
|
||||
void SetCursorStyle(int x, int y);
|
||||
|
||||
void NewGame();
|
||||
void Undo();
|
||||
void Redo();
|
||||
|
||||
ScoreFile* GetScoreFile() const { return m_scoreFile; }
|
||||
void UpdateScores();
|
||||
void EnableHelpingHand(bool enable) { m_helpingHand = enable; }
|
||||
void EnableRightButtonUndo(bool enable) { m_rightBtnUndo = enable; }
|
||||
void LayoutGame();
|
||||
void ShowPlayerDialog();
|
||||
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
|
||||
private:
|
||||
wxFont* m_font;
|
||||
Game* m_game;
|
||||
ScoreFile* m_scoreFile;
|
||||
wxCursor* m_arrowCursor;
|
||||
wxCursor* m_handCursor;
|
||||
bool m_helpingHand;
|
||||
bool m_rightBtnUndo;
|
||||
wxString m_player;
|
||||
PlayerSelectionDialog* m_playerDialog;
|
||||
bool m_leftBtnDown;
|
||||
};
|
||||
|
||||
#endif
|
||||
551
libs/wxWidgets-3.3.1/demos/forty/card.cpp
Normal file
551
libs/wxWidgets-3.3.1/demos/forty/card.cpp
Normal file
@@ -0,0 +1,551 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: card.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description
|
||||
//| A class for drawing playing cards.
|
||||
//| Currently assumes that the card symbols have been
|
||||
//| loaded into hbmap_symbols and the pictures for the
|
||||
//| Jack, Queen and King have been loaded into
|
||||
//| hbmap_pictures.
|
||||
//+-------------------------------------------------------------+
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "forty.h"
|
||||
#include "card.h"
|
||||
|
||||
#include "pictures.xpm"
|
||||
#include "symbols.xpm"
|
||||
|
||||
wxBitmap* Card::m_pictureBmap = 0;
|
||||
wxBitmap* Card::m_symbolBmap = 0;
|
||||
|
||||
double Card::m_scale = 1.0;
|
||||
int Card::m_width = 50;
|
||||
int Card::m_height = 70;
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Card::Card() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Constructor for a playing card. |
|
||||
//| Checks that the value is in the range 1..52 and then |
|
||||
//| initialises the suit, colour, pipValue and wayUp. |
|
||||
//+-------------------------------------------------------------+
|
||||
Card::Card(int value, WayUp way_up) :
|
||||
m_wayUp(way_up)
|
||||
{
|
||||
if (!m_symbolBmap)
|
||||
{
|
||||
m_symbolBmap = new wxBitmap(symbols_xpm);
|
||||
if (!m_symbolBmap->IsOk())
|
||||
{
|
||||
::wxMessageBox(wxT("Failed to load bitmap CardSymbols"), wxT("Error"));
|
||||
}
|
||||
}
|
||||
if (!m_pictureBmap)
|
||||
{
|
||||
m_pictureBmap = new wxBitmap(Pictures);
|
||||
if (!m_pictureBmap->IsOk())
|
||||
{
|
||||
::wxMessageBox(wxT("Failed to load bitmap CardPictures"), wxT("Error"));
|
||||
}
|
||||
}
|
||||
|
||||
if (value >= 1 && value <= PackSize)
|
||||
{
|
||||
switch ((value - 1) / 13)
|
||||
{
|
||||
case 0:
|
||||
m_suit = clubs;
|
||||
m_colour = black;
|
||||
break;
|
||||
case 1:
|
||||
m_suit = diamonds;
|
||||
m_colour = red;
|
||||
break;
|
||||
case 2:
|
||||
m_suit = hearts;
|
||||
m_colour = red;
|
||||
break;
|
||||
case 3:
|
||||
m_suit = spades;
|
||||
m_colour = black;
|
||||
break;
|
||||
}
|
||||
m_pipValue = 1 + (value - 1) % 13;
|
||||
m_status = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_status = false;
|
||||
}
|
||||
} // Card::Card()
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Card::SetScale() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Scales the cards |
|
||||
//+-------------------------------------------------------------+
|
||||
void Card::SetScale(double scale)
|
||||
{
|
||||
m_scale = scale;
|
||||
m_width = int(50*scale);
|
||||
m_height = int(70*scale);
|
||||
}
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Card::Erase() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Erase the card at (x, y) by drawing a rectangle in the |
|
||||
//| background colour. |
|
||||
//+-------------------------------------------------------------+
|
||||
void Card::Erase(wxDC& dc, int x, int y)
|
||||
{
|
||||
wxPen* pen = wxThePenList->FindOrCreatePen(
|
||||
FortyApp::BackgroundColour()
|
||||
);
|
||||
dc.SetPen(* pen);
|
||||
dc.SetBrush(FortyApp::BackgroundBrush());
|
||||
dc.DrawRectangle(x, y, m_width, m_height);
|
||||
} // Card::Erase()
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Card::Draw() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Draw the card at (x, y). |
|
||||
//| If the card is facedown draw the back of the card. |
|
||||
//| If the card is faceup draw the front of the card. |
|
||||
//| Cards are not held in bitmaps, instead they are drawn |
|
||||
//| from their constituent parts when required. |
|
||||
//| hbmap_symbols contains large and small suit symbols and |
|
||||
//| pip values. These are copied to the appropriate part of |
|
||||
//| the card. Picture cards use the pictures defined in |
|
||||
//| hbmap_pictures. Note that only one picture is defined |
|
||||
//| for the Jack, Queen and King, unlike a real pack where |
|
||||
//| each suit is different. |
|
||||
//| |
|
||||
//| WARNING: |
|
||||
//| The locations of these symbols is 'hard-wired' into the |
|
||||
//| code. Editing the bitmaps or the numbers below will |
|
||||
//| result in the wrong symbols being displayed. |
|
||||
//+-------------------------------------------------------------+
|
||||
void Card::Draw(wxDC& dc, int x, int y)
|
||||
{
|
||||
wxBrush backgroundBrush( dc.GetBackground() );
|
||||
dc.SetBrush(* wxWHITE_BRUSH);
|
||||
dc.SetPen(* wxBLACK_PEN);
|
||||
dc.DrawRoundedRectangle(x, y, m_width, m_height, 4);
|
||||
if (m_wayUp == facedown)
|
||||
{
|
||||
dc.SetBackground(* wxRED_BRUSH);
|
||||
dc.SetBackgroundMode(wxBRUSHSTYLE_SOLID);
|
||||
wxBrush* brush = wxTheBrushList->FindOrCreateBrush(
|
||||
*wxBLACK, wxBRUSHSTYLE_CROSSDIAG_HATCH
|
||||
);
|
||||
dc.SetBrush(* brush);
|
||||
|
||||
dc.DrawRoundedRectangle(
|
||||
x + 4, y + 4,
|
||||
m_width - 8, m_height - 8,
|
||||
2
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMemoryDC memoryDC;
|
||||
|
||||
memoryDC.SelectObject(*m_symbolBmap);
|
||||
|
||||
// dc.SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT);
|
||||
|
||||
dc.SetTextBackground(*wxWHITE);
|
||||
switch (m_suit)
|
||||
{
|
||||
case spades:
|
||||
case clubs:
|
||||
dc.SetTextForeground(*wxBLACK);
|
||||
break;
|
||||
case diamonds:
|
||||
case hearts:
|
||||
dc.SetTextForeground(*wxRED);
|
||||
break;
|
||||
}
|
||||
|
||||
int symsize = 11;
|
||||
int sympos = 14;
|
||||
int sympos2 = 25;
|
||||
int symdist = 5;
|
||||
int symdist2 = 6;
|
||||
|
||||
int pipsize,pippos,valueheight,valuewidth;
|
||||
int valuepos;
|
||||
if (m_scale > 1.2)
|
||||
{
|
||||
pipsize = symsize;
|
||||
pippos = sympos;
|
||||
valueheight = 10;
|
||||
valuewidth = 9;
|
||||
valuepos = 50;
|
||||
}
|
||||
else
|
||||
{
|
||||
pipsize = 7;
|
||||
pippos = 0;
|
||||
valueheight = 7;
|
||||
valuewidth = 6;
|
||||
valuepos = 36;
|
||||
}
|
||||
|
||||
// Draw the value
|
||||
dc.Blit((wxCoord)(x + m_scale*3),
|
||||
(wxCoord)(y + m_scale*3),
|
||||
valuewidth,
|
||||
valueheight,
|
||||
&memoryDC,
|
||||
valuewidth * (m_pipValue - 1),
|
||||
valuepos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x + m_width - m_scale*3 - valuewidth),
|
||||
(wxCoord)(y + m_height - valueheight - m_scale*3),
|
||||
valuewidth,
|
||||
valueheight,
|
||||
&memoryDC,
|
||||
valuewidth * (m_pipValue - 1),
|
||||
valuepos+valueheight,
|
||||
wxCOPY);
|
||||
|
||||
// Draw the pips
|
||||
dc.Blit((wxCoord)(x + m_scale*3 + valuewidth+2),
|
||||
(wxCoord)(y + m_scale*3),
|
||||
pipsize,
|
||||
pipsize,
|
||||
&memoryDC,
|
||||
pipsize * m_suit,
|
||||
pippos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x + m_width - m_scale*3-valuewidth-pipsize-2),
|
||||
(wxCoord)(y + m_height - pipsize - m_scale*3),
|
||||
pipsize,
|
||||
pipsize,
|
||||
&memoryDC,
|
||||
pipsize * m_suit,
|
||||
pipsize+pippos,
|
||||
wxCOPY);
|
||||
|
||||
switch (m_pipValue)
|
||||
{
|
||||
case 1:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - m_scale*5 + m_height / 2),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - symdist + m_height / 2),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
wxFALLTHROUGH;
|
||||
case 2:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - symdist + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - symdist + m_height / 2),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
wxFALLTHROUGH;
|
||||
case 4:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
dc.Blit((wxCoord)(x - symdist + 5 * m_width / 10),
|
||||
(wxCoord)(y - symdist + 5 * m_height / 8),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
wxFALLTHROUGH;
|
||||
case 7:
|
||||
dc.Blit((wxCoord)(x - symdist + 5 * m_width / 10),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 8),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
wxFALLTHROUGH;
|
||||
case 6:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC, symsize * m_suit, sympos, wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + m_height / 2),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + m_height / 2),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
break;
|
||||
|
||||
case 10:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - symdist + 2 * m_height / 3),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
wxFALLTHROUGH;
|
||||
case 9:
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist2 + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist2 + 5 * m_height / 12),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + 7 * m_height / 12),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 4),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist2 + m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist2 + 5 * m_height / 12),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + 7 * m_height / 12),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + 3 * m_width / 4),
|
||||
(wxCoord)(y - symdist + 3 * m_height / 4),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x - symdist + m_width / 2),
|
||||
(wxCoord)(y - symdist + m_height / 3),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
break;
|
||||
case 11:
|
||||
wxFALLTHROUGH;
|
||||
case 12:
|
||||
wxFALLTHROUGH;
|
||||
case 13:
|
||||
memoryDC.SelectObject(*m_pictureBmap);
|
||||
int picwidth = 40,picheight = 45;
|
||||
dc.Blit((wxCoord)(x + (m_width-picwidth)/2),
|
||||
(wxCoord)(y - picheight/2 + m_height/2),
|
||||
picwidth,
|
||||
picheight,
|
||||
&memoryDC,
|
||||
picwidth * (m_pipValue - 11),
|
||||
0,
|
||||
wxCOPY);
|
||||
|
||||
memoryDC.SelectObject(*m_symbolBmap);
|
||||
dc.Blit((wxCoord)(x + m_width-(m_width-picwidth)/2-symsize-3),
|
||||
(wxCoord)(y - picheight/2+m_height/2+1),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos,
|
||||
wxCOPY);
|
||||
dc.Blit((wxCoord)(x + (m_width-picwidth)/2+2),
|
||||
(wxCoord)(y + picheight/2 + m_height/2-symsize),
|
||||
symsize,
|
||||
symsize,
|
||||
&memoryDC,
|
||||
symsize * m_suit,
|
||||
sympos2,
|
||||
wxCOPY);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
dc.SetBackground( backgroundBrush );
|
||||
} // Card:Draw()
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Card::DrawNullCard() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Draws the outline of a card at (x, y). |
|
||||
//| Used to draw place holders for empty piles of cards. |
|
||||
//+-------------------------------------------------------------+
|
||||
void Card::DrawNullCard(wxDC& dc, int x, int y)
|
||||
{
|
||||
wxPen* pen = wxThePenList->FindOrCreatePen(FortyApp::TextColour());
|
||||
dc.SetBrush(FortyApp::BackgroundBrush());
|
||||
dc.SetPen(*pen);
|
||||
dc.DrawRoundedRectangle(x, y, m_width, m_height, 4);
|
||||
} // Card::DrawNullCard()
|
||||
72
libs/wxWidgets-3.3.1/demos/forty/card.h
Normal file
72
libs/wxWidgets-3.3.1/demos/forty/card.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: card.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| A class for drawing playing cards. |
|
||||
//| InitCards() must be called before using the Card class, |
|
||||
//| otherwise the card bitmaps will not be loaded. |
|
||||
//| CloseCards() must be called before terminating the |
|
||||
//| program so that the bitmaps are deleted and the memory |
|
||||
//| given back to Windows. |
|
||||
//+-------------------------------------------------------------+
|
||||
#ifndef _CARD_H_
|
||||
#define _CARD_H_
|
||||
|
||||
// Constants
|
||||
const int PackSize = 52;
|
||||
|
||||
#define CardHeight Card::GetHeight()
|
||||
#define CardWidth Card::GetWidth()
|
||||
|
||||
// Data types
|
||||
enum Suit { clubs = 0, diamonds = 1, hearts = 2, spades = 3 };
|
||||
enum SuitColour { red = 0, black = 1 };
|
||||
enum WayUp { faceup, facedown };
|
||||
|
||||
//--------------------------------//
|
||||
// A class defining a single card //
|
||||
//--------------------------------//
|
||||
class Card {
|
||||
friend class FortyApp;
|
||||
|
||||
static double m_scale;
|
||||
static int m_width,m_height;
|
||||
|
||||
public:
|
||||
Card(int value, WayUp way_up = facedown);
|
||||
virtual ~Card(){}
|
||||
|
||||
void Draw(wxDC& pDC, int x, int y);
|
||||
static void DrawNullCard(wxDC& pDC, int x, int y); // Draw card place-holder
|
||||
void Erase(wxDC& pDC, int x, int y);
|
||||
|
||||
void TurnCard(WayUp way_up = faceup) { m_wayUp = way_up; }
|
||||
WayUp GetWayUp() const { return m_wayUp; }
|
||||
int GetPipValue() const { return m_pipValue; }
|
||||
Suit GetSuit() const { return m_suit; }
|
||||
SuitColour GetColour() const { return m_colour; }
|
||||
static void SetScale(double scale);
|
||||
static int GetHeight() { return m_height; }
|
||||
static int GetWidth() { return m_width; }
|
||||
static double GetScale() { return m_scale; }
|
||||
|
||||
private:
|
||||
Suit m_suit;
|
||||
int m_pipValue; // in the range 1 (Ace) to 13 (King)
|
||||
SuitColour m_colour; // red or black
|
||||
bool m_status;
|
||||
WayUp m_wayUp;
|
||||
|
||||
static wxBitmap* m_symbolBmap;
|
||||
static wxBitmap* m_pictureBmap;
|
||||
};
|
||||
|
||||
#endif // _CARD_H_
|
||||
BIN
libs/wxWidgets-3.3.1/demos/forty/cards.ico
Normal file
BIN
libs/wxWidgets-3.3.1/demos/forty/cards.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 766 B |
57
libs/wxWidgets-3.3.1/demos/forty/descrip.mms
Normal file
57
libs/wxWidgets-3.3.1/demos/forty/descrip.mms
Normal file
@@ -0,0 +1,57 @@
|
||||
#*****************************************************************************
|
||||
# *
|
||||
# Make file for VMS *
|
||||
# Author : J.Jansen (joukj@hrem.nano.tudelft.nl) *
|
||||
# Date : 3 October 2009 *
|
||||
# *
|
||||
#*****************************************************************************
|
||||
.first
|
||||
define wx [--.include.wx]
|
||||
|
||||
.ifdef __WXMOTIF__
|
||||
CXX_DEFINE = /define=(__WXMOTIF__=1)/name=(as_is,short)\
|
||||
/assume=(nostdnew,noglobal_array_new)
|
||||
.else
|
||||
.ifdef __WXGTK__
|
||||
CXX_DEFINE = /define=(__WXGTK__=1)/float=ieee/name=(as_is,short)/ieee=denorm\
|
||||
/assume=(nostdnew,noglobal_array_new)
|
||||
.else
|
||||
CXX_DEFINE =
|
||||
.endif
|
||||
.endif
|
||||
|
||||
.suffixes : .cpp
|
||||
|
||||
.cpp.obj :
|
||||
cxx $(CXXFLAGS)$(CXX_DEFINE) $(MMS$TARGET_NAME).cpp
|
||||
|
||||
all :
|
||||
.ifdef __WXMOTIF__
|
||||
$(MMS)$(MMSQUALIFIERS) forty.exe
|
||||
.else
|
||||
.ifdef __WXGTK__
|
||||
$(MMS)$(MMSQUALIFIERS) forty_gtk.exe
|
||||
.endif
|
||||
.endif
|
||||
|
||||
OBJS=canvas.obj,card.obj,forty.obj,game.obj,pile.obj,playerdg.obj,scoredg.obj,\
|
||||
scorefil.obj
|
||||
|
||||
.ifdef __WXMOTIF__
|
||||
forty.exe : $(OBJS)
|
||||
cxxlink/exec=forty.exe $(OBJS),[--.lib]vms/opt
|
||||
.else
|
||||
.ifdef __WXGTK__
|
||||
forty_gtk.exe : $(OBJS)
|
||||
cxxlink/exec=forty_gtk.exe $(OBJS),[--.lib]vms_gtk/opt
|
||||
.endif
|
||||
.endif
|
||||
|
||||
canvas.obj : canvas.cpp
|
||||
card.obj : card.cpp
|
||||
forty.obj : forty.cpp
|
||||
game.obj : game.cpp
|
||||
pile.obj : pile.cpp
|
||||
playerdg.obj : playerdg.cpp
|
||||
scoredg.obj : scoredg.cpp
|
||||
scorefil.obj : scorefil.cpp
|
||||
30
libs/wxWidgets-3.3.1/demos/forty/forty.bkl
Normal file
30
libs/wxWidgets-3.3.1/demos/forty/forty.bkl
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" ?>
|
||||
<makefile>
|
||||
|
||||
<include file="../../build/bakefiles/common_samples.bkl"/>
|
||||
|
||||
<exe id="forty" template="wx_sample" template_append="wx_append">
|
||||
<sources>
|
||||
forty.cpp
|
||||
canvas.cpp
|
||||
card.cpp
|
||||
game.cpp
|
||||
pile.cpp
|
||||
playerdg.cpp
|
||||
scoredg.cpp
|
||||
scorefil.cpp
|
||||
</sources>
|
||||
<wx-lib>html</wx-lib>
|
||||
<wx-lib>xml</wx-lib>
|
||||
<wx-lib>core</wx-lib>
|
||||
<wx-lib>base</wx-lib>
|
||||
<win32-res>forty.rc</win32-res>
|
||||
</exe>
|
||||
|
||||
<wx-data id="data">
|
||||
<files>
|
||||
about.htm
|
||||
</files>
|
||||
</wx-data>
|
||||
|
||||
</makefile>
|
||||
369
libs/wxWidgets-3.3.1/demos/forty/forty.cpp
Normal file
369
libs/wxWidgets-3.3.1/demos/forty/forty.cpp
Normal file
@@ -0,0 +1,369 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: forty.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "canvas.h"
|
||||
#include "forty.h"
|
||||
#include "card.h"
|
||||
#include "scoredg.h"
|
||||
#include "forty.xpm"
|
||||
|
||||
#if wxUSE_HTML
|
||||
#include "wx/textfile.h"
|
||||
#include "wx/html/htmlwin.h"
|
||||
#endif
|
||||
|
||||
#include "wx/stockitem.h"
|
||||
|
||||
wxBEGIN_EVENT_TABLE(FortyFrame, wxFrame)
|
||||
EVT_MENU(wxID_NEW, FortyFrame::NewGame)
|
||||
EVT_MENU(wxID_EXIT, FortyFrame::Exit)
|
||||
EVT_MENU(wxID_ABOUT, FortyFrame::About)
|
||||
EVT_MENU(wxID_HELP_CONTENTS, FortyFrame::Help)
|
||||
EVT_MENU(wxID_UNDO, FortyFrame::Undo)
|
||||
EVT_MENU(wxID_REDO, FortyFrame::Redo)
|
||||
EVT_MENU(SCORES, FortyFrame::Scores)
|
||||
EVT_MENU(RIGHT_BUTTON_UNDO, FortyFrame::ToggleRightButtonUndo)
|
||||
EVT_MENU(HELPING_HAND, FortyFrame::ToggleHelpingHand)
|
||||
EVT_MENU(LARGE_CARDS, FortyFrame::ToggleCardSize)
|
||||
EVT_CLOSE(FortyFrame::OnCloseWindow)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
// Create a new application object
|
||||
wxIMPLEMENT_APP(FortyApp);
|
||||
|
||||
wxColour* FortyApp::m_backgroundColour = 0;
|
||||
wxColour* FortyApp::m_textColour = 0;
|
||||
wxBrush* FortyApp::m_backgroundBrush = 0;
|
||||
|
||||
FortyApp::~FortyApp()
|
||||
{
|
||||
delete m_backgroundColour;
|
||||
delete m_textColour;
|
||||
delete m_backgroundBrush;
|
||||
delete Card::m_symbolBmap;
|
||||
delete Card::m_pictureBmap;
|
||||
|
||||
}
|
||||
|
||||
bool FortyApp::OnInit()
|
||||
{
|
||||
bool largecards = false;
|
||||
m_helpFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("about.htm");
|
||||
if (!wxFileExists(m_helpFile))
|
||||
{
|
||||
m_helpFile = wxPathOnly(argv[0]) + wxFILE_SEP_PATH + wxT("about.htm");
|
||||
}
|
||||
|
||||
wxSize size(668,510);
|
||||
|
||||
if ((argc > 1) && (!wxStrcmp(argv[1],wxT("-L"))))
|
||||
{
|
||||
largecards = true;
|
||||
size = wxSize(1000,750);
|
||||
}
|
||||
|
||||
FortyFrame* frame = new FortyFrame(
|
||||
0,
|
||||
wxT("Forty Thieves"),
|
||||
wxDefaultPosition,
|
||||
size,
|
||||
largecards
|
||||
);
|
||||
|
||||
// Show the frame
|
||||
frame->Show(true);
|
||||
|
||||
frame->GetCanvas()->ShowPlayerDialog();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const wxColour& FortyApp::BackgroundColour()
|
||||
{
|
||||
if (!m_backgroundColour)
|
||||
{
|
||||
m_backgroundColour = new wxColour(0, 128, 0);
|
||||
}
|
||||
|
||||
return *m_backgroundColour;
|
||||
}
|
||||
|
||||
const wxBrush& FortyApp::BackgroundBrush()
|
||||
{
|
||||
if (!m_backgroundBrush)
|
||||
{
|
||||
m_backgroundBrush = new wxBrush(BackgroundColour());
|
||||
}
|
||||
|
||||
return *m_backgroundBrush;
|
||||
}
|
||||
|
||||
const wxColour& FortyApp::TextColour()
|
||||
{
|
||||
if (!m_textColour)
|
||||
{
|
||||
m_textColour = new wxColour(*wxBLACK);
|
||||
}
|
||||
|
||||
return *m_textColour;
|
||||
}
|
||||
|
||||
// My frame constructor
|
||||
FortyFrame::FortyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size, bool largecards):
|
||||
wxFrame(frame, wxID_ANY, title, pos, size)
|
||||
{
|
||||
#ifdef __WXMAC__
|
||||
wxApp::s_macAboutMenuItemId = wxID_ABOUT ;
|
||||
#endif
|
||||
// set the icon
|
||||
#ifdef __WXMSW__
|
||||
SetIcon(wxIcon(wxT("CardsIcon")));
|
||||
#else
|
||||
SetIcon(wxIcon(forty_xpm));
|
||||
#endif
|
||||
|
||||
// Make a menu bar
|
||||
wxMenu* gameMenu = new wxMenu;
|
||||
gameMenu->Append(wxID_NEW, wxGetStockLabel(wxID_NEW), wxT("Start a new game"));
|
||||
gameMenu->Append(SCORES, wxT("&Scores..."), wxT("Displays scores"));
|
||||
gameMenu->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT), wxT("Exits Forty Thieves"));
|
||||
|
||||
wxMenu* editMenu = new wxMenu;
|
||||
editMenu->Append(wxID_UNDO, wxGetStockLabel(wxID_UNDO), wxT("Undo the last move"));
|
||||
editMenu->Append(wxID_REDO, wxGetStockLabel(wxID_REDO), wxT("Redo a move that has been undone"));
|
||||
|
||||
wxMenu* optionsMenu = new wxMenu;
|
||||
optionsMenu->Append(RIGHT_BUTTON_UNDO,
|
||||
wxT("&Right button undo"),
|
||||
wxT("Enables/disables right mouse button undo and redo"),
|
||||
true
|
||||
);
|
||||
optionsMenu->Append(HELPING_HAND,
|
||||
wxT("&Helping hand"),
|
||||
wxT("Enables/disables hand cursor when a card can be moved"),
|
||||
true
|
||||
);
|
||||
optionsMenu->Append(LARGE_CARDS,
|
||||
wxT("&Large cards"),
|
||||
wxT("Enables/disables large cards for high resolution displays"),
|
||||
true
|
||||
);
|
||||
optionsMenu->Check(HELPING_HAND, true);
|
||||
optionsMenu->Check(RIGHT_BUTTON_UNDO, true);
|
||||
optionsMenu->Check(LARGE_CARDS, largecards ? true : false);
|
||||
|
||||
wxMenu* helpMenu = new wxMenu;
|
||||
helpMenu->Append(wxID_HELP_CONTENTS, wxT("&Help Contents"), wxT("Displays information about playing the game"));
|
||||
helpMenu->Append(wxID_ABOUT, wxT("&About"), wxT("About Forty Thieves"));
|
||||
|
||||
m_menuBar = new wxMenuBar;
|
||||
m_menuBar->Append(gameMenu, wxT("&Game"));
|
||||
m_menuBar->Append(editMenu, wxT("&Edit"));
|
||||
m_menuBar->Append(optionsMenu, wxT("&Options"));
|
||||
m_menuBar->Append(helpMenu, wxT("&Help"));
|
||||
|
||||
SetMenuBar(m_menuBar);
|
||||
|
||||
if (largecards)
|
||||
Card::SetScale(1.3);
|
||||
|
||||
m_canvas = new FortyCanvas(this, wxDefaultPosition, size);
|
||||
|
||||
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
|
||||
topsizer->Add( m_canvas, 1, wxEXPAND | wxALL, 0);
|
||||
SetSizer( topsizer );
|
||||
|
||||
#if wxUSE_STATUSBAR
|
||||
CreateStatusBar();
|
||||
#endif // wxUSE_STATUSBAR
|
||||
|
||||
topsizer->SetSizeHints( this );
|
||||
}
|
||||
|
||||
void FortyFrame::OnCloseWindow(wxCloseEvent& event)
|
||||
{
|
||||
if (m_canvas->OnCloseCanvas() )
|
||||
{
|
||||
this->Destroy();
|
||||
}
|
||||
else
|
||||
event.Veto();
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::NewGame(wxCommandEvent&)
|
||||
{
|
||||
m_canvas->NewGame();
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::Exit(wxCommandEvent&)
|
||||
{
|
||||
Close(true);
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::Help(wxCommandEvent& event)
|
||||
{
|
||||
#if wxUSE_HTML
|
||||
if (wxFileExists(wxGetApp().GetHelpFile()))
|
||||
{
|
||||
FortyAboutDialog dialog(this, wxID_ANY, wxT("Forty Thieves Instructions"));
|
||||
if (dialog.ShowModal() == wxID_OK)
|
||||
{
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
About(event);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::About(wxCommandEvent&)
|
||||
{
|
||||
wxMessageBox(
|
||||
wxT("Forty Thieves\n\n")
|
||||
wxT("A free card game written with the wxWidgets toolkit\n")
|
||||
wxT("Author: Chris Breeze (c) 1992-2004\n")
|
||||
wxT("email: chris@breezesys.com"),
|
||||
wxT("About Forty Thieves"),
|
||||
wxOK|wxICON_INFORMATION, this
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
FortyFrame::Undo(wxCommandEvent&)
|
||||
{
|
||||
m_canvas->Undo();
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::Redo(wxCommandEvent&)
|
||||
{
|
||||
m_canvas->Redo();
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::Scores(wxCommandEvent&)
|
||||
{
|
||||
m_canvas->UpdateScores();
|
||||
ScoreDialog scores(this, m_canvas->GetScoreFile());
|
||||
scores.Display();
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::ToggleRightButtonUndo(wxCommandEvent& event)
|
||||
{
|
||||
bool checked = m_menuBar->IsChecked(event.GetId());
|
||||
m_canvas->EnableRightButtonUndo(checked);
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::ToggleHelpingHand(wxCommandEvent& event)
|
||||
{
|
||||
bool checked = m_menuBar->IsChecked(event.GetId());
|
||||
m_canvas->EnableHelpingHand(checked);
|
||||
}
|
||||
|
||||
void
|
||||
FortyFrame::ToggleCardSize(wxCommandEvent& event)
|
||||
{
|
||||
bool checked = m_menuBar->IsChecked(event.GetId());
|
||||
Card::SetScale(checked ? 1.3 : 1);
|
||||
m_canvas->LayoutGame();
|
||||
m_canvas->Refresh();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// stAboutDialog
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
FortyAboutDialog::FortyAboutDialog( wxWindow *parent, wxWindowID id, const wxString &title,
|
||||
const wxPoint &position, const wxSize& size, long style ) :
|
||||
wxDialog( parent, id, title, position, size, style )
|
||||
{
|
||||
AddControls(this);
|
||||
|
||||
Centre(wxBOTH);
|
||||
}
|
||||
|
||||
bool FortyAboutDialog::AddControls(wxWindow* parent)
|
||||
{
|
||||
#if wxUSE_HTML
|
||||
wxString htmlText;
|
||||
wxString htmlFile = wxGetApp().GetHelpFile();
|
||||
|
||||
{
|
||||
wxTextFile file(htmlFile);
|
||||
if (file.Exists())
|
||||
{
|
||||
file.Open();
|
||||
for ( htmlText = file.GetFirstLine();
|
||||
!file.Eof();
|
||||
htmlText << file.GetNextLine() << wxT("\n") ) ;
|
||||
}
|
||||
}
|
||||
|
||||
if (htmlText.empty())
|
||||
{
|
||||
htmlText.Printf(wxT("<html><head><title>Warning</title></head><body><P>Sorry, could not find resource for About dialog<P></body></html>"));
|
||||
}
|
||||
|
||||
// Customize the HTML
|
||||
htmlText.Replace(wxT("$DATE$"), wxT(__DATE__));
|
||||
|
||||
wxSize htmlSize(400, 290);
|
||||
|
||||
// Note: in later versions of wxWin this will be fixed so wxRAISED_BORDER
|
||||
// does the right thing. Meanwhile, this is a workaround.
|
||||
#ifdef __WXMSW__
|
||||
long borderStyle = wxDOUBLE_BORDER;
|
||||
#else
|
||||
long borderStyle = wxRAISED_BORDER;
|
||||
#endif
|
||||
|
||||
wxHtmlWindow* html = new wxHtmlWindow(this, ID_ABOUT_HTML_WINDOW, wxDefaultPosition, htmlSize, borderStyle);
|
||||
html -> SetBorders(10);
|
||||
html -> SetPage(htmlText);
|
||||
|
||||
//// Start of sizer-based control creation
|
||||
|
||||
wxSizer *item0 = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxWindow *item1 = parent->FindWindow( ID_ABOUT_HTML_WINDOW );
|
||||
wxASSERT( item1 );
|
||||
item0->Add( item1, 0, wxALIGN_CENTRE|wxALL, 5 );
|
||||
|
||||
wxButton *item2 = new wxButton( parent, wxID_CLOSE );
|
||||
item2->SetDefault();
|
||||
item2->SetFocus();
|
||||
SetAffirmativeId(wxID_CLOSE);
|
||||
|
||||
item0->Add( item2, 0, wxALIGN_RIGHT|wxALL, 5 );
|
||||
|
||||
parent->SetSizer( item0 );
|
||||
parent->Layout();
|
||||
item0->Fit( parent );
|
||||
item0->SetSizeHints( parent );
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
90
libs/wxWidgets-3.3.1/demos/forty/forty.h
Normal file
90
libs/wxWidgets-3.3.1/demos/forty/forty.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: forty.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _FORTY_H_
|
||||
#define _FORTY_H_
|
||||
|
||||
class FortyApp: public wxApp
|
||||
{
|
||||
public:
|
||||
FortyApp(){}
|
||||
virtual ~FortyApp();
|
||||
bool OnInit() override;
|
||||
|
||||
static const wxColour& BackgroundColour();
|
||||
static const wxColour& TextColour();
|
||||
static const wxBrush& BackgroundBrush();
|
||||
const wxString& GetHelpFile() const { return m_helpFile; }
|
||||
|
||||
private:
|
||||
static wxColour* m_backgroundColour;
|
||||
static wxColour* m_textColour;
|
||||
static wxBrush* m_backgroundBrush;
|
||||
wxString m_helpFile;
|
||||
};
|
||||
|
||||
wxDECLARE_APP(FortyApp);
|
||||
|
||||
class FortyCanvas;
|
||||
class FortyFrame: public wxFrame
|
||||
{
|
||||
public:
|
||||
FortyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size, bool largecards);
|
||||
virtual ~FortyFrame(){}
|
||||
|
||||
void OnCloseWindow(wxCloseEvent& event);
|
||||
|
||||
// Menu callbacks
|
||||
void NewGame(wxCommandEvent& event);
|
||||
void Exit(wxCommandEvent& event);
|
||||
void About(wxCommandEvent& event);
|
||||
void Help(wxCommandEvent& event);
|
||||
void Undo(wxCommandEvent& event);
|
||||
void Redo(wxCommandEvent& event);
|
||||
void Scores(wxCommandEvent& event);
|
||||
void ToggleRightButtonUndo(wxCommandEvent& event);
|
||||
void ToggleHelpingHand(wxCommandEvent& event);
|
||||
void ToggleCardSize(wxCommandEvent& event);
|
||||
|
||||
FortyCanvas* GetCanvas() { return m_canvas; }
|
||||
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
|
||||
private:
|
||||
enum MenuCommands {
|
||||
SCORES = 10,
|
||||
RIGHT_BUTTON_UNDO,
|
||||
HELPING_HAND,
|
||||
LARGE_CARDS
|
||||
};
|
||||
|
||||
wxMenuBar* m_menuBar;
|
||||
FortyCanvas* m_canvas;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// stAboutDialog
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
class FortyAboutDialog: public wxDialog
|
||||
{
|
||||
public:
|
||||
// constructors and destructors
|
||||
FortyAboutDialog( wxWindow *parent, wxWindowID id, const wxString &title,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxDEFAULT_DIALOG_STYLE );
|
||||
|
||||
bool AddControls(wxWindow* parent);
|
||||
};
|
||||
|
||||
#define ID_ABOUT_HTML_WINDOW 1000
|
||||
|
||||
#endif
|
||||
6
libs/wxWidgets-3.3.1/demos/forty/forty.rc
Normal file
6
libs/wxWidgets-3.3.1/demos/forty/forty.rc
Normal file
@@ -0,0 +1,6 @@
|
||||
aaaaa ICON "cards.ico"
|
||||
|
||||
#include "wx/msw/wx.rc"
|
||||
|
||||
CardsIcon ICON "cards.ico"
|
||||
|
||||
43
libs/wxWidgets-3.3.1/demos/forty/forty.xpm
Normal file
43
libs/wxWidgets-3.3.1/demos/forty/forty.xpm
Normal file
@@ -0,0 +1,43 @@
|
||||
/* XPM */
|
||||
static const char *const forty_xpm[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 5 1",
|
||||
". c Black",
|
||||
"X c #FFFFFF",
|
||||
" c None",
|
||||
"O c #FF0000",
|
||||
"o c #848484",
|
||||
/* pixels */
|
||||
" ............................ ",
|
||||
"..XXXXXXXXXXXXXXXXXXXXXXXXXX.. ",
|
||||
".XXXXXXXXXXXXXXXXXXXXXXXXXXXX.o ",
|
||||
".XXXXXX...XXXXXXXXXXXOXXXXXXX.oo",
|
||||
".XXXXX.....XXXXXXXXXOOOXXXXXX.oo",
|
||||
".XXXXX.....XXXXXXXXXOOOXXXXXX.oo",
|
||||
".XXXXXX...XXXXXXXXXOOOOOXXXXX.oo",
|
||||
".XXX..XX.XX..XXXXXOOOOOOOXXXX.oo",
|
||||
".XX....X.X....XXXOOOOOOOOOXXX.oo",
|
||||
".XX...........XXXXOOOOOOOXXXX.oo",
|
||||
".XX....X.X....XXXXXOOOOOXXXXX.oo",
|
||||
".XXX..XX.XX..XXXXXXXOOOXXXXXX.oo",
|
||||
".XXXXXX...XXXXXXXXXXOOOXXXXXX.oo",
|
||||
".XXXX.......XXXXXXXXXOXXXXXXX.oo",
|
||||
".XXXXXXXXXXXXXXXXXXXXXXXXXXXX.oo",
|
||||
".XXXXXXXXXXXXXXXXXXXXXXXXXXXX.oo",
|
||||
".XXXXOOXXXOOXXXXXXXXX.XXXXXXX.oo",
|
||||
".XXXOOOOXOOOOXXXXXXX...XXXXXX.oo",
|
||||
".XXOOOOOOOOOOOXXXXX.....XXXXX.oo",
|
||||
".XXOOOOOOOOOOOXXXX.......XXXX.oo",
|
||||
".XXOOOOOOOOOOOXXX.........XXX.oo",
|
||||
".XXOOOOOOOOOOOXX...........XX.oo",
|
||||
".XXXOOOOOOOOOXXX...........XX.oo",
|
||||
".XXXXOOOOOOOXXXX....X.X....XX.oo",
|
||||
".XXXXXOOOOOXXXXXX..XX.XX..XXX.oo",
|
||||
".XXXXXXOOOXXXXXXXXXX...XXXXXX.oo",
|
||||
".XXXXXXXOXXXXXXXXX.......XXXX.oo",
|
||||
".XXXXXXXXXXXXXXXXXXXXXXXXXXXX.oo",
|
||||
"..XXXXXXXXXXXXXXXXXXXXXXXXXX.ooo",
|
||||
" ...........................oooo",
|
||||
" oooooooooooooooooooooooooooo ",
|
||||
" oooooooooooooooooooooooooo "
|
||||
};
|
||||
973
libs/wxWidgets-3.3.1/demos/forty/game.cpp
Normal file
973
libs/wxWidgets-3.3.1/demos/forty/game.cpp
Normal file
@@ -0,0 +1,973 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: game.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include "forty.h"
|
||||
#include "game.h"
|
||||
|
||||
Game::Game(int wins, int games, int score) :
|
||||
m_inPlay(false),
|
||||
m_moveIndex(0),
|
||||
m_redoIndex(0),
|
||||
m_bmap(0),
|
||||
m_bmapCard(0)
|
||||
{
|
||||
int i;
|
||||
|
||||
m_pack = new Pack(2, 2 + 4 * (CardHeight + 2));
|
||||
srand(time(0));
|
||||
|
||||
for (i = 0; i < 5; i++) m_pack->Shuffle();
|
||||
|
||||
m_discard = new Discard(2, 2 + 5 * (CardHeight + 2));
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
m_foundations[i] = new Foundation(2 + (i / 4) * (CardWidth + 2),
|
||||
2 + (i % 4) * (CardHeight + 2));
|
||||
}
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
m_bases[i] = new Base(8 + (i + 2) * (CardWidth + 2), 2);
|
||||
}
|
||||
Deal();
|
||||
m_srcPile = 0;
|
||||
m_liftedCard = 0;
|
||||
|
||||
// copy the input parameters for future reference
|
||||
m_numWins = wins;
|
||||
m_numGames = games;
|
||||
m_totalScore = score;
|
||||
m_currentScore = 0;
|
||||
}
|
||||
|
||||
|
||||
void Game::Layout()
|
||||
{
|
||||
int i;
|
||||
|
||||
m_pack->SetPos(2, 2 + 4 * (CardHeight + 2));
|
||||
|
||||
m_discard->SetPos(2, 2 + 5 * (CardHeight + 2));
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
m_foundations[i]->SetPos(2 + (i / 4) * (CardWidth + 2),
|
||||
2 + (i % 4) * (CardHeight + 2));
|
||||
}
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
m_bases[i]->SetPos(8 + (i + 2) * (CardWidth + 2), 2);
|
||||
}
|
||||
delete m_bmap;
|
||||
delete m_bmapCard;
|
||||
m_bmap = 0;
|
||||
m_bmapCard = 0;
|
||||
}
|
||||
|
||||
// Make sure we delete all objects created by the game object
|
||||
Game::~Game()
|
||||
{
|
||||
int i;
|
||||
|
||||
delete m_pack;
|
||||
delete m_discard;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
delete m_foundations[i];
|
||||
}
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
delete m_bases[i];
|
||||
}
|
||||
delete m_bmap;
|
||||
delete m_bmapCard;
|
||||
}
|
||||
|
||||
/*
|
||||
Set the score for a new player.
|
||||
NB: call Deal() first if the new player is to start
|
||||
a new game
|
||||
*/
|
||||
void Game::NewPlayer(int wins, int games, int score)
|
||||
{
|
||||
m_numWins = wins;
|
||||
m_numGames = games;
|
||||
m_totalScore = score;
|
||||
m_currentScore = 0;
|
||||
}
|
||||
|
||||
// Undo the last move
|
||||
void Game::Undo(wxDC& dc)
|
||||
{
|
||||
if (m_moveIndex > 0)
|
||||
{
|
||||
m_moveIndex--;
|
||||
Card* card = m_moves[m_moveIndex].dest->RemoveTopCard(dc);
|
||||
m_moves[m_moveIndex].src->AddCard(dc, card);
|
||||
DisplayScore(dc);
|
||||
}
|
||||
}
|
||||
|
||||
// Redo the last move
|
||||
void Game::Redo(wxDC& dc)
|
||||
{
|
||||
if (m_moveIndex < m_redoIndex)
|
||||
{
|
||||
Card* card = m_moves[m_moveIndex].src->RemoveTopCard(dc);
|
||||
if (m_moves[m_moveIndex].src == m_pack)
|
||||
{
|
||||
m_pack->Redraw(dc);
|
||||
card->TurnCard(faceup);
|
||||
}
|
||||
m_moves[m_moveIndex].dest->AddCard(dc, card);
|
||||
DisplayScore(dc);
|
||||
m_moveIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
void Game::DoMove(wxDC& dc, Pile* src, Pile* dest)
|
||||
{
|
||||
if (m_moveIndex < MaxMoves)
|
||||
{
|
||||
if (src == dest)
|
||||
{
|
||||
wxMessageBox(wxT("Game::DoMove() src == dest"), wxT("Debug message"),
|
||||
wxOK | wxICON_EXCLAMATION);
|
||||
}
|
||||
m_moves[m_moveIndex].src = src;
|
||||
m_moves[m_moveIndex].dest = dest;
|
||||
m_moveIndex++;
|
||||
|
||||
// when we do a move any moves in redo buffer are discarded
|
||||
m_redoIndex = m_moveIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMessageBox(wxT("Game::DoMove() Undo buffer full"), wxT("Debug message"),
|
||||
wxOK | wxICON_EXCLAMATION);
|
||||
}
|
||||
|
||||
if (!m_inPlay)
|
||||
{
|
||||
m_inPlay = true;
|
||||
m_numGames++;
|
||||
}
|
||||
DisplayScore(dc);
|
||||
|
||||
if (HaveYouWon())
|
||||
{
|
||||
wxWindow *frame = wxTheApp->GetTopWindow();
|
||||
wxWindow *canvas = nullptr;
|
||||
|
||||
if (frame)
|
||||
{
|
||||
wxWindowList::compatibility_iterator node = frame->GetChildren().GetFirst();
|
||||
if (node) canvas = (wxWindow*)node->GetData();
|
||||
}
|
||||
|
||||
// This game is over
|
||||
m_inPlay = false;
|
||||
|
||||
// Redraw the score box to update games won
|
||||
DisplayScore(dc);
|
||||
|
||||
if (wxMessageBox(wxT("Do you wish to play again?"),
|
||||
wxT("Well Done, You have won!"), wxYES_NO | wxICON_QUESTION) == wxYES)
|
||||
{
|
||||
Deal();
|
||||
canvas->Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
// user cancelled the dialog - exit the app
|
||||
((wxFrame*)canvas->GetParent())->Close(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Game::DisplayScore(wxDC& dc)
|
||||
{
|
||||
wxColour bgColour = FortyApp::BackgroundColour();
|
||||
wxPen* pen = wxThePenList->FindOrCreatePen(bgColour);
|
||||
dc.SetTextBackground(bgColour);
|
||||
dc.SetTextForeground(FortyApp::TextColour());
|
||||
dc.SetBrush(FortyApp::BackgroundBrush());
|
||||
dc.SetPen(* pen);
|
||||
|
||||
// count the number of cards in foundations
|
||||
m_currentScore = 0;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
m_currentScore += m_foundations[i]->GetNumCards();
|
||||
}
|
||||
|
||||
int x, y;
|
||||
m_pack->GetTopCardPos(x, y);
|
||||
x += 12 * CardWidth - 105;
|
||||
|
||||
wxCoord w, h;
|
||||
{
|
||||
wxCoord width, height;
|
||||
dc.GetTextExtent(wxT("Average score:m_x"), &width, &height);
|
||||
w = width;
|
||||
h = height;
|
||||
}
|
||||
dc.DrawRectangle(x + w, y, 20, 4 * h);
|
||||
|
||||
wxString str;
|
||||
str.Printf(wxT("%d"), m_currentScore);
|
||||
dc.DrawText(wxT("Score:"), x, y);
|
||||
dc.DrawText(str, x + w, y);
|
||||
y += h;
|
||||
|
||||
str.Printf(wxT("%d"), m_numGames);
|
||||
dc.DrawText(wxT("Games played:"), x, y);
|
||||
dc.DrawText(str, x + w, y);
|
||||
y += h;
|
||||
|
||||
str.Printf(wxT("%d"), m_numWins);
|
||||
dc.DrawText(wxT("Games won:"), x, y);
|
||||
dc.DrawText(str, x + w, y);
|
||||
y += h;
|
||||
|
||||
int average = 0;
|
||||
if (m_numGames > 0)
|
||||
{
|
||||
average = (2 * (m_currentScore + m_totalScore) + m_numGames ) / (2 * m_numGames);
|
||||
}
|
||||
str.Printf(wxT("%d"), average);
|
||||
dc.DrawText(wxT("Average score:"), x, y);
|
||||
dc.DrawText(str, x + w, y);
|
||||
}
|
||||
|
||||
|
||||
// Shuffle the m_pack and deal the cards
|
||||
void Game::Deal()
|
||||
{
|
||||
int i, j;
|
||||
Card* card;
|
||||
|
||||
// Reset all the piles, the undo buffer and shuffle the m_pack
|
||||
m_moveIndex = 0;
|
||||
m_pack->ResetPile();
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
m_pack->Shuffle();
|
||||
}
|
||||
m_discard->ResetPile();
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
m_bases[i]->ResetPile();
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
m_foundations[i]->ResetPile();
|
||||
}
|
||||
|
||||
// Deal the initial 40 cards onto the bases
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
for (j = 1; j <= 4; j++)
|
||||
{
|
||||
card = m_pack->RemoveTopCard();
|
||||
card->TurnCard(faceup);
|
||||
m_bases[i]->AddCard(card);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_inPlay)
|
||||
{
|
||||
// player has started the game and then redealt
|
||||
// and so we must add the score for this game to the total score
|
||||
m_totalScore += m_currentScore;
|
||||
}
|
||||
m_currentScore = 0;
|
||||
m_inPlay = false;
|
||||
}
|
||||
|
||||
|
||||
// Redraw the m_pack, discard pile, the bases and the foundations
|
||||
void Game::Redraw(wxDC& dc)
|
||||
{
|
||||
int i;
|
||||
m_pack->Redraw(dc);
|
||||
m_discard->Redraw(dc);
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
m_foundations[i]->Redraw(dc);
|
||||
}
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
m_bases[i]->Redraw(dc);
|
||||
}
|
||||
DisplayScore(dc);
|
||||
|
||||
if (m_bmap == 0)
|
||||
{
|
||||
m_bmap = new wxBitmap(CardWidth, CardHeight);
|
||||
m_bmapCard = new wxBitmap(CardWidth, CardHeight);
|
||||
|
||||
// Initialise the card bitmap to the background colour
|
||||
wxMemoryDC memoryDC;
|
||||
memoryDC.SelectObject(*m_bmapCard);
|
||||
memoryDC.SetPen( *wxTRANSPARENT_PEN );
|
||||
memoryDC.SetBrush(FortyApp::BackgroundBrush());
|
||||
memoryDC.DrawRectangle(0, 0, CardWidth, CardHeight);
|
||||
memoryDC.SelectObject(*m_bmap);
|
||||
memoryDC.DrawRectangle(0, 0, CardWidth, CardHeight);
|
||||
memoryDC.SelectObject(wxNullBitmap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Test to see if the point (x, y) is over the top card of one of the piles
|
||||
// Returns pointer to the pile, or 0 if (x, y) is not over a pile
|
||||
// or the pile is empty
|
||||
Pile* Game::WhichPile(int x, int y)
|
||||
{
|
||||
if (m_pack->GetCard(x, y) &&
|
||||
m_pack->GetCard(x, y) == m_pack->GetTopCard())
|
||||
{
|
||||
return m_pack;
|
||||
}
|
||||
|
||||
if (m_discard->GetCard(x, y) &&
|
||||
m_discard->GetCard(x, y) == m_discard->GetTopCard())
|
||||
{
|
||||
return m_discard;
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (m_foundations[i]->GetCard(x, y) &&
|
||||
m_foundations[i]->GetCard(x, y) == m_foundations[i]->GetTopCard())
|
||||
{
|
||||
return m_foundations[i];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
if (m_bases[i]->GetCard(x, y) &&
|
||||
m_bases[i]->GetCard(x, y) == m_bases[i]->GetTopCard())
|
||||
{
|
||||
return m_bases[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// Left button is pressed - if cursor is over the m_pack then deal a card
|
||||
// otherwise if it is over a card pick it up ready to be dragged - see MouseMove()
|
||||
bool Game::LButtonDown(wxDC& dc, int x, int y)
|
||||
{
|
||||
m_srcPile = WhichPile(x, y);
|
||||
if (m_srcPile == m_pack)
|
||||
{
|
||||
Card* card = m_pack->RemoveTopCard();
|
||||
if (card)
|
||||
{
|
||||
m_pack->Redraw(dc);
|
||||
card->TurnCard(faceup);
|
||||
m_discard->AddCard(dc, card);
|
||||
DoMove(dc, m_pack, m_discard);
|
||||
}
|
||||
m_srcPile = 0;
|
||||
}
|
||||
else if (m_srcPile)
|
||||
{
|
||||
m_srcPile->GetTopCardPos(m_xPos, m_yPos);
|
||||
m_xOffset = m_xPos - x;
|
||||
m_yOffset = m_yPos - y;
|
||||
|
||||
// Copy the area under the card
|
||||
// Initialise the card bitmap to the background colour
|
||||
{
|
||||
wxMemoryDC memoryDC;
|
||||
memoryDC.SelectObject(*m_bmap);
|
||||
m_liftedCard = m_srcPile->RemoveTopCard(memoryDC, m_xPos, m_yPos);
|
||||
}
|
||||
|
||||
// Draw the card in card bitmap ready for blitting onto
|
||||
// the screen
|
||||
{
|
||||
wxMemoryDC memoryDC;
|
||||
memoryDC.SelectObject(*m_bmapCard);
|
||||
m_liftedCard->Draw(memoryDC, 0, 0);
|
||||
}
|
||||
}
|
||||
return m_srcPile != 0;
|
||||
}
|
||||
|
||||
// Called when the left button is double clicked
|
||||
// If a card is under the pointer and it can move elsewhere then move it.
|
||||
// Move onto a foundation as first choice, a populated base as second and
|
||||
// an empty base as third choice.
|
||||
// NB Cards in the m_pack cannot be moved in this way - they aren't in play
|
||||
// yet
|
||||
void Game::LButtonDblClk(wxDC& dc, int x, int y)
|
||||
{
|
||||
Pile* pile = WhichPile(x, y);
|
||||
if (!pile) return;
|
||||
|
||||
// Double click on m_pack is the same as left button down
|
||||
if (pile == m_pack)
|
||||
{
|
||||
LButtonDown(dc, x, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
Card* card = pile->GetTopCard();
|
||||
|
||||
if (card)
|
||||
{
|
||||
int i;
|
||||
|
||||
// if the card is an ace then try to place it next
|
||||
// to an ace of the same suit
|
||||
if (card->GetPipValue() == 1)
|
||||
{
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
Card* m_topCard = m_foundations[i]->GetTopCard();
|
||||
if ( m_topCard )
|
||||
{
|
||||
if (m_topCard->GetSuit() == card->GetSuit() &&
|
||||
m_foundations[i + 4] != pile &&
|
||||
m_foundations[i + 4]->GetTopCard() == 0)
|
||||
{
|
||||
pile->RemoveTopCard(dc);
|
||||
m_foundations[i + 4]->AddCard(dc, card);
|
||||
DoMove(dc, pile, m_foundations[i + 4]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// try to place the card on a foundation
|
||||
for(i = 0; i < 8; i++)
|
||||
{
|
||||
if (m_foundations[i]->AcceptCard(card) && m_foundations[i] != pile)
|
||||
{
|
||||
pile->RemoveTopCard(dc);
|
||||
m_foundations[i]->AddCard(dc, card);
|
||||
DoMove(dc, pile, m_foundations[i]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// try to place the card on a populated base
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
if (m_bases[i]->AcceptCard(card) &&
|
||||
m_bases[i] != pile &&
|
||||
m_bases[i]->GetTopCard())
|
||||
{
|
||||
pile->RemoveTopCard(dc);
|
||||
m_bases[i]->AddCard(dc, card);
|
||||
DoMove(dc, pile, m_bases[i]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// try to place the card on any base
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
if (m_bases[i]->AcceptCard(card) && m_bases[i] != pile)
|
||||
{
|
||||
pile->RemoveTopCard(dc);
|
||||
m_bases[i]->AddCard(dc, card);
|
||||
DoMove(dc, pile, m_bases[i]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Test to see whether the game has been won:
|
||||
// i.e. m_pack, discard and bases are empty
|
||||
bool Game::HaveYouWon()
|
||||
{
|
||||
if (m_pack->GetTopCard()) return false;
|
||||
if (m_discard->GetTopCard()) return false;
|
||||
for(int i = 0; i < 10; i++)
|
||||
{
|
||||
if (m_bases[i]->GetTopCard()) return false;
|
||||
}
|
||||
m_numWins++;
|
||||
m_totalScore += m_currentScore;
|
||||
m_currentScore = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// See whether the card under the cursor can be moved somewhere else
|
||||
// Returns 'true' if it can be moved, 'false' otherwise
|
||||
bool Game::CanYouGo(int x, int y)
|
||||
{
|
||||
Pile* pile = WhichPile(x, y);
|
||||
if (pile && pile != m_pack)
|
||||
{
|
||||
Card* card = pile->GetTopCard();
|
||||
|
||||
if (card)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < 8; i++)
|
||||
{
|
||||
if (m_foundations[i]->AcceptCard(card) && m_foundations[i] != pile)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
if (m_bases[i]->GetTopCard() &&
|
||||
m_bases[i]->AcceptCard(card) &&
|
||||
m_bases[i] != pile)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Called when the left button is released after dragging a card
|
||||
// Scan the piles to see if this card overlaps a pile and can be added
|
||||
// to the pile. If the card overlaps more than one pile on which it can be placed
|
||||
// then put it on the nearest pile.
|
||||
void Game::LButtonUp(wxDC& dc, int x, int y)
|
||||
{
|
||||
if (m_srcPile)
|
||||
{
|
||||
// work out the position of the dragged card
|
||||
x += m_xOffset;
|
||||
y += m_yOffset;
|
||||
|
||||
Pile* nearestPile = 0;
|
||||
int distance = (CardHeight + CardWidth) * (CardHeight + CardWidth);
|
||||
|
||||
// find the nearest pile which will accept the card
|
||||
int i;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (DropCard(x, y, m_foundations[i], m_liftedCard))
|
||||
{
|
||||
if (m_foundations[i]->CalcDistance(x, y) < distance)
|
||||
{
|
||||
nearestPile = m_foundations[i];
|
||||
distance = nearestPile->CalcDistance(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
if (DropCard(x, y, m_bases[i], m_liftedCard))
|
||||
{
|
||||
if (m_bases[i]->CalcDistance(x, y) < distance)
|
||||
{
|
||||
nearestPile = m_bases[i];
|
||||
distance = nearestPile->CalcDistance(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Restore the area under the card
|
||||
wxMemoryDC memoryDC;
|
||||
memoryDC.SelectObject(*m_bmap);
|
||||
dc.Blit(m_xPos, m_yPos, CardWidth, CardHeight,
|
||||
&memoryDC, 0, 0, wxCOPY);
|
||||
|
||||
// Draw the card in its new position
|
||||
if (nearestPile)
|
||||
{
|
||||
// Add to new pile
|
||||
nearestPile->AddCard(dc, m_liftedCard);
|
||||
if (nearestPile != m_srcPile)
|
||||
{
|
||||
DoMove(dc, m_srcPile, nearestPile);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Return card to src pile
|
||||
m_srcPile->AddCard(dc, m_liftedCard);
|
||||
}
|
||||
m_srcPile = 0;
|
||||
m_liftedCard = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool Game::DropCard(int x, int y, Pile* pile, Card* card)
|
||||
{
|
||||
bool retval = false;
|
||||
if (pile->Overlap(x, y))
|
||||
{
|
||||
if (pile->AcceptCard(card))
|
||||
{
|
||||
retval = true;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
void Game::MouseMove(wxDC& dc, int mx, int my)
|
||||
{
|
||||
if (m_liftedCard)
|
||||
{
|
||||
wxMemoryDC memoryDC;
|
||||
memoryDC.SelectObject(*m_bmap);
|
||||
|
||||
int dx = mx + m_xOffset - m_xPos;
|
||||
int dy = my + m_yOffset - m_yPos;
|
||||
|
||||
if (abs(dx) >= CardWidth || abs(dy) >= CardHeight)
|
||||
{
|
||||
// Restore the area under the card
|
||||
dc.Blit(m_xPos, m_yPos, CardWidth, CardHeight,
|
||||
&memoryDC, 0, 0, wxCOPY);
|
||||
|
||||
// Copy the area under the card in the new position
|
||||
memoryDC.Blit(0, 0, CardWidth, CardHeight,
|
||||
&dc, m_xPos + dx, m_yPos + dy, wxCOPY);
|
||||
}
|
||||
else if (dx >= 0)
|
||||
{
|
||||
// dx >= 0
|
||||
dc.Blit(m_xPos, m_yPos, dx, CardHeight, &memoryDC, 0, 0, wxCOPY);
|
||||
if (dy >= 0)
|
||||
{
|
||||
// dy >= 0
|
||||
dc.Blit(m_xPos + dx, m_yPos, CardWidth - dx, dy, &memoryDC, dx, 0, wxCOPY);
|
||||
memoryDC.Blit(0, 0, CardWidth - dx, CardHeight - dy,
|
||||
&memoryDC, dx, dy, wxCOPY);
|
||||
memoryDC.Blit(0, CardHeight - dy, CardWidth - dx, dy,
|
||||
&dc, m_xPos + dx, m_yPos + CardHeight, wxCOPY);
|
||||
}
|
||||
else
|
||||
{
|
||||
// dy < 0
|
||||
dc.Blit(m_xPos + dx, m_yPos + dy + CardHeight, CardWidth - dx, -dy,
|
||||
&memoryDC, dx, CardHeight + dy, wxCOPY);
|
||||
memoryDC.Blit(0, -dy, CardWidth - dx, CardHeight + dy,
|
||||
&memoryDC, dx, 0, wxCOPY);
|
||||
memoryDC.Blit(0, 0, CardWidth - dx, -dy,
|
||||
&dc, m_xPos + dx, m_yPos + dy, wxCOPY);
|
||||
}
|
||||
memoryDC.Blit(CardWidth - dx, 0, dx, CardHeight,
|
||||
&dc, m_xPos + CardWidth, m_yPos + dy, wxCOPY);
|
||||
}
|
||||
else
|
||||
{
|
||||
// dx < 0
|
||||
dc.Blit(m_xPos + CardWidth + dx, m_yPos, -dx, CardHeight,
|
||||
&memoryDC, CardWidth + dx, 0, wxCOPY);
|
||||
if (dy >= 0)
|
||||
{
|
||||
dc.Blit(m_xPos, m_yPos, CardWidth + dx, dy, &memoryDC, 0, 0, wxCOPY);
|
||||
memoryDC.Blit(-dx, 0, CardWidth + dx, CardHeight - dy,
|
||||
&memoryDC, 0, dy, wxCOPY);
|
||||
memoryDC.Blit(-dx, CardHeight - dy, CardWidth + dx, dy,
|
||||
&dc, m_xPos, m_yPos + CardHeight, wxCOPY);
|
||||
}
|
||||
else
|
||||
{
|
||||
// dy < 0
|
||||
dc.Blit(m_xPos, m_yPos + CardHeight + dy, CardWidth + dx, -dy,
|
||||
&memoryDC, 0, CardHeight + dy, wxCOPY);
|
||||
memoryDC.Blit(-dx, -dy, CardWidth + dx, CardHeight + dy,
|
||||
&memoryDC, 0, 0, wxCOPY);
|
||||
memoryDC.Blit(-dx, 0, CardWidth + dx, -dy,
|
||||
&dc, m_xPos, m_yPos + dy, wxCOPY);
|
||||
}
|
||||
memoryDC.Blit(0, 0, -dx, CardHeight,
|
||||
&dc, m_xPos + dx, m_yPos + dy, wxCOPY);
|
||||
}
|
||||
m_xPos += dx;
|
||||
m_yPos += dy;
|
||||
|
||||
// draw the card in its new position
|
||||
memoryDC.SelectObject(*m_bmapCard);
|
||||
dc.Blit(m_xPos, m_yPos, CardWidth, CardHeight,
|
||||
&memoryDC, 0, 0, wxCOPY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------//
|
||||
// The Pack class: holds the two decks of cards //
|
||||
//----------------------------------------------//
|
||||
Pack::Pack(int x, int y) : Pile(x, y, 0, 0)
|
||||
{
|
||||
for (m_topCard = 0; m_topCard < NumCards; m_topCard++)
|
||||
{
|
||||
m_cards[m_topCard] = new Card(1 + m_topCard / 2, facedown);
|
||||
}
|
||||
m_topCard = NumCards - 1;
|
||||
}
|
||||
|
||||
|
||||
void Pack::Shuffle()
|
||||
{
|
||||
Card* temp[NumCards];
|
||||
int i;
|
||||
|
||||
// Don't try to shuffle an empty m_pack!
|
||||
if (m_topCard < 0) return;
|
||||
|
||||
// Copy the cards into a temporary array. Start by clearing
|
||||
// the array and then copy the card into a random position.
|
||||
// If the position is occupied then find the next lower position.
|
||||
for (i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
temp[i] = 0;
|
||||
}
|
||||
for (i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
int pos = rand() % (m_topCard + 1);
|
||||
while (temp[pos])
|
||||
{
|
||||
pos--;
|
||||
if (pos < 0) pos = m_topCard;
|
||||
}
|
||||
m_cards[i]->TurnCard(facedown);
|
||||
temp[pos] = m_cards[i];
|
||||
m_cards[i] = 0;
|
||||
}
|
||||
|
||||
// Copy each card back into the m_pack in a random
|
||||
// position. If position is occupied then find nearest
|
||||
// unoccupied position after the random position.
|
||||
for (i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
int pos = rand() % (m_topCard + 1);
|
||||
while (m_cards[pos])
|
||||
{
|
||||
pos++;
|
||||
if (pos > m_topCard) pos = 0;
|
||||
}
|
||||
m_cards[pos] = temp[i];
|
||||
}
|
||||
}
|
||||
|
||||
void Pack::Redraw(wxDC& dc)
|
||||
{
|
||||
Pile::Redraw(dc);
|
||||
|
||||
wxString str;
|
||||
str.Printf(wxT("%d "), m_topCard + 1);
|
||||
|
||||
dc.SetBackgroundMode( wxBRUSHSTYLE_SOLID );
|
||||
dc.SetTextBackground(FortyApp::BackgroundColour());
|
||||
dc.SetTextForeground(FortyApp::TextColour());
|
||||
dc.DrawText(str, m_x + CardWidth + 5, m_y + CardHeight / 2);
|
||||
|
||||
}
|
||||
|
||||
void Pack::AddCard(Card* card)
|
||||
{
|
||||
if (card == m_cards[m_topCard + 1])
|
||||
{
|
||||
m_topCard++;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMessageBox(wxT("Pack::AddCard() Undo error"), wxT("Forty Thieves: Warning"),
|
||||
wxOK | wxICON_EXCLAMATION);
|
||||
}
|
||||
card->TurnCard(facedown);
|
||||
}
|
||||
|
||||
|
||||
Pack::~Pack()
|
||||
{
|
||||
for (m_topCard = 0; m_topCard < NumCards; m_topCard++)
|
||||
{
|
||||
delete m_cards[m_topCard];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------//
|
||||
// The Base class: holds the initial pile of four cards //
|
||||
//------------------------------------------------------//
|
||||
Base::Base(int x, int y) : Pile(x, y, 0, 12)
|
||||
{
|
||||
m_topCard = -1;
|
||||
}
|
||||
|
||||
|
||||
bool Base::AcceptCard(Card* card)
|
||||
{
|
||||
bool retval = false;
|
||||
|
||||
if (m_topCard >= 0)
|
||||
{
|
||||
if (m_cards[m_topCard]->GetSuit() == card->GetSuit() &&
|
||||
m_cards[m_topCard]->GetPipValue() - 1 == card->GetPipValue())
|
||||
{
|
||||
retval = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// pile is empty - ACCEPT
|
||||
retval = true;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------//
|
||||
// The Foundation class: holds the cards built up from the ace... //
|
||||
//----------------------------------------------------------------//
|
||||
Foundation::Foundation(int x, int y) : Pile(x, y, 0, 0)
|
||||
{
|
||||
m_topCard = -1;
|
||||
}
|
||||
|
||||
bool Foundation::AcceptCard(Card* card)
|
||||
{
|
||||
bool retval = false;
|
||||
|
||||
if (m_topCard >= 0)
|
||||
{
|
||||
if (m_cards[m_topCard]->GetSuit() == card->GetSuit() &&
|
||||
m_cards[m_topCard]->GetPipValue() + 1 == card->GetPipValue())
|
||||
{
|
||||
retval = true;
|
||||
}
|
||||
}
|
||||
else if (card->GetPipValue() == 1)
|
||||
{
|
||||
// It's an ace and the pile is empty - ACCEPT
|
||||
retval = true;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------//
|
||||
// The Discard class: holds cards dealt from the m_pack //
|
||||
//----------------------------------------------------//
|
||||
Discard::Discard(int x, int y) : Pile(x, y, 19, 0)
|
||||
{
|
||||
m_topCard = -1;
|
||||
}
|
||||
|
||||
void Discard::Redraw(wxDC& dc)
|
||||
{
|
||||
if (m_topCard >= 0)
|
||||
{
|
||||
if (m_dx == 0 && m_dy == 0)
|
||||
{
|
||||
m_cards[m_topCard]->Draw(dc, m_x, m_y);
|
||||
}
|
||||
else
|
||||
{
|
||||
int x = m_x;
|
||||
int y = m_y;
|
||||
for (int i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
m_cards[i]->Draw(dc, x, y);
|
||||
x += m_dx;
|
||||
y += m_dy;
|
||||
if (i == 31)
|
||||
{
|
||||
x = m_x;
|
||||
y = m_y + CardHeight / 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Card::DrawNullCard(dc, m_x, m_y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Discard::GetTopCardPos(int& x, int& y)
|
||||
{
|
||||
if (m_topCard < 0)
|
||||
{
|
||||
x = m_x;
|
||||
y = m_y;
|
||||
}
|
||||
else if (m_topCard > 31)
|
||||
{
|
||||
x = m_x + m_dx * (m_topCard - 32);
|
||||
y = m_y + CardHeight / 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = m_x + m_dx * m_topCard;
|
||||
y = m_y;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Card* Discard::RemoveTopCard(wxDC& dc, int m_xOffset, int m_yOffset)
|
||||
{
|
||||
Card* card;
|
||||
|
||||
if (m_topCard <= 31)
|
||||
{
|
||||
card = Pile::RemoveTopCard(dc, m_xOffset, m_yOffset);
|
||||
}
|
||||
else
|
||||
{
|
||||
int topX, topY, x, y;
|
||||
GetTopCardPos(topX, topY);
|
||||
card = Pile::RemoveTopCard();
|
||||
card->Erase(dc, topX - m_xOffset, topY - m_yOffset);
|
||||
GetTopCardPos(x, y);
|
||||
dc.SetClippingRegion(topX - m_xOffset, topY - m_yOffset,
|
||||
CardWidth, CardHeight);
|
||||
|
||||
for (int i = m_topCard - 31; i <= m_topCard - 31 + CardWidth / m_dx; i++)
|
||||
{
|
||||
m_cards[i]->Draw(dc, m_x - m_xOffset + i * m_dx, m_y - m_yOffset);
|
||||
}
|
||||
if (m_topCard > 31)
|
||||
{
|
||||
m_cards[m_topCard]->Draw(dc, topX - m_xOffset - m_dx, topY - m_yOffset);
|
||||
}
|
||||
dc.DestroyClippingRegion();
|
||||
}
|
||||
|
||||
return card;
|
||||
}
|
||||
134
libs/wxWidgets-3.3.1/demos/forty/game.h
Normal file
134
libs/wxWidgets-3.3.1/demos/forty/game.h
Normal file
@@ -0,0 +1,134 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: game.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _GAME_H_
|
||||
#define _GAME_H_
|
||||
#include "card.h"
|
||||
#include "pile.h"
|
||||
|
||||
const int MaxMoves = 800;
|
||||
|
||||
|
||||
//---------------------------------------//
|
||||
// A class which holds the pack of cards //
|
||||
//---------------------------------------//
|
||||
class Pack : public Pile {
|
||||
public:
|
||||
Pack(int x, int y);
|
||||
virtual ~Pack();
|
||||
void Redraw(wxDC& dc) override;
|
||||
void ResetPile() override { m_topCard = NumCards - 1; }
|
||||
void Shuffle();
|
||||
void AddCard(Card* card) override; // Add card
|
||||
void AddCard(wxDC& dc, Card* card) override { AddCard(card); Redraw(dc); }
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------//
|
||||
// A class which holds a base i.e. the initial 10 x 4 cards //
|
||||
//----------------------------------------------------------//
|
||||
class Base : public Pile {
|
||||
public:
|
||||
Base(int x, int y);
|
||||
virtual ~Base(){}
|
||||
bool AcceptCard(Card* card) override;
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------//
|
||||
// A class which holds a foundation i.e. Ace, 2, 3... //
|
||||
//----------------------------------------------------//
|
||||
class Foundation : public Pile {
|
||||
public:
|
||||
Foundation(int x, int y);
|
||||
virtual ~Foundation(){}
|
||||
bool AcceptCard(Card* card) override;
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------//
|
||||
// A class which holds the discard pile //
|
||||
//--------------------------------------//
|
||||
class Discard : public Pile {
|
||||
public:
|
||||
Discard(int x, int y);
|
||||
virtual ~Discard(){}
|
||||
void Redraw(wxDC& dc) override;
|
||||
void GetTopCardPos(int& x, int& y) override;
|
||||
Card* RemoveTopCard(wxDC& dc, int m_xOffset, int m_yOffset) override;
|
||||
};
|
||||
|
||||
|
||||
class Game {
|
||||
public:
|
||||
Game(int wins, int games, int score);
|
||||
virtual ~Game();
|
||||
|
||||
void Layout();
|
||||
void NewPlayer(int wins, int games, int score);
|
||||
void Deal(); // Shuffle and deal a new game
|
||||
bool CanYouGo(int x, int y); // can card under (x,y) go somewhere?
|
||||
bool HaveYouWon(); // have you won the game?
|
||||
|
||||
void Undo(wxDC& dc); // Undo the last go
|
||||
void Redo(wxDC& dc); // Redo the last go
|
||||
|
||||
void Redraw(wxDC& dc);
|
||||
void DisplayScore(wxDC& dc);
|
||||
bool LButtonDown(wxDC& dc, int mx, int my);
|
||||
void LButtonUp(wxDC& dc, int mx, int my);
|
||||
void LButtonDblClk(wxDC& dc, int mx, int my);
|
||||
void MouseMove(wxDC& dc, int mx, int my);
|
||||
|
||||
int GetNumWins() const { return m_numWins; }
|
||||
int GetNumGames() const { return m_numGames; }
|
||||
int GetScore() const { return m_currentScore + m_totalScore; }
|
||||
|
||||
bool InPlay() const { return m_inPlay; }
|
||||
|
||||
private:
|
||||
bool DropCard(int x, int y, Pile* pile, Card* card);
|
||||
// can the card at (x, y) be dropped on the pile?
|
||||
Pile* WhichPile(int x, int y); // which pile is (x, y) over?
|
||||
void DoMove(wxDC& dc, Pile* src, Pile* dest);
|
||||
|
||||
bool m_inPlay; // flag indicating that the game has started
|
||||
|
||||
// undo buffer
|
||||
struct {
|
||||
Pile* src;
|
||||
Pile* dest;
|
||||
} m_moves[MaxMoves];
|
||||
int m_moveIndex; // current position in undo/redo buffer
|
||||
int m_redoIndex; // max move index available for redo
|
||||
|
||||
// the various piles of cards
|
||||
Pack* m_pack;
|
||||
Discard* m_discard;
|
||||
Base* m_bases[10];
|
||||
Foundation* m_foundations[8];
|
||||
|
||||
// variables to do with dragging cards
|
||||
Pile* m_srcPile;
|
||||
Card* m_liftedCard;
|
||||
int m_xPos, m_yPos; // current coords of card being dragged
|
||||
int m_xOffset, m_yOffset; // card/mouse offset when dragging a card
|
||||
|
||||
wxBitmap* m_bmap;
|
||||
wxBitmap* m_bmapCard;
|
||||
|
||||
// variables to do with scoring
|
||||
int m_numGames;
|
||||
int m_numWins;
|
||||
int m_totalScore;
|
||||
int m_currentScore;
|
||||
};
|
||||
|
||||
#endif // _GAME_H_
|
||||
268
libs/wxWidgets-3.3.1/demos/forty/makefile.gcc
Normal file
268
libs/wxWidgets-3.3.1/demos/forty/makefile.gcc
Normal file
@@ -0,0 +1,268 @@
|
||||
# =========================================================================
|
||||
# This makefile was generated by
|
||||
# Bakefile 0.2.13 (http://www.bakefile.org)
|
||||
# Do not modify, all changes will be overwritten!
|
||||
# =========================================================================
|
||||
|
||||
include ../../build/msw/config.gcc
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Do not modify the rest of this file!
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
### Variables: ###
|
||||
|
||||
CPPDEPS = -MT$@ -MF$@.d -MD -MP
|
||||
WX_RELEASE_NODOT = 33
|
||||
COMPILER_PREFIX = gcc
|
||||
OBJS = \
|
||||
$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)
|
||||
LIBDIRNAME = \
|
||||
.\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG)
|
||||
SETUPHDIR = $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)
|
||||
FORTY_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG_2) $(__THREADSFLAG) \
|
||||
-D__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) \
|
||||
$(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \
|
||||
-I$(SETUPHDIR) -I.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_p) -W \
|
||||
-Wall -I. $(__DLLFLAG_p) -I.\..\..\samples -DNOPCH $(__RTTIFLAG_5) \
|
||||
$(__EXCEPTIONSFLAG_6) -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)
|
||||
FORTY_OBJECTS = \
|
||||
$(OBJS)\forty_forty.o \
|
||||
$(OBJS)\forty_canvas.o \
|
||||
$(OBJS)\forty_card.o \
|
||||
$(OBJS)\forty_game.o \
|
||||
$(OBJS)\forty_pile.o \
|
||||
$(OBJS)\forty_playerdg.o \
|
||||
$(OBJS)\forty_scoredg.o \
|
||||
$(OBJS)\forty_scorefil.o \
|
||||
$(OBJS)\forty_forty_rc.o
|
||||
|
||||
### Conditionally set variables: ###
|
||||
|
||||
ifeq ($(USE_GUI),0)
|
||||
PORTNAME = base
|
||||
endif
|
||||
ifeq ($(USE_GUI),1)
|
||||
PORTNAME = msw$(TOOLKIT_VERSION)
|
||||
endif
|
||||
ifeq ($(OFFICIAL_BUILD),1)
|
||||
COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD
|
||||
endif
|
||||
ifeq ($(BUILD),debug)
|
||||
WXDEBUGFLAG = d
|
||||
endif
|
||||
ifeq ($(WXUNIV),1)
|
||||
WXUNIVNAME = univ
|
||||
endif
|
||||
ifeq ($(SHARED),1)
|
||||
WXDLLFLAG = dll
|
||||
endif
|
||||
ifeq ($(SHARED),0)
|
||||
LIBTYPE_SUFFIX = lib
|
||||
endif
|
||||
ifeq ($(SHARED),1)
|
||||
LIBTYPE_SUFFIX = dll
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),0)
|
||||
EXTRALIBS_FOR_BASE =
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),1)
|
||||
EXTRALIBS_FOR_BASE =
|
||||
endif
|
||||
ifeq ($(BUILD),debug)
|
||||
__OPTIMIZEFLAG_2 = -O0
|
||||
endif
|
||||
ifeq ($(BUILD),release)
|
||||
__OPTIMIZEFLAG_2 = -O2
|
||||
endif
|
||||
ifeq ($(USE_RTTI),0)
|
||||
__RTTIFLAG_5 = -fno-rtti
|
||||
endif
|
||||
ifeq ($(USE_RTTI),1)
|
||||
__RTTIFLAG_5 =
|
||||
endif
|
||||
ifeq ($(USE_EXCEPTIONS),0)
|
||||
__EXCEPTIONSFLAG_6 = -fno-exceptions
|
||||
endif
|
||||
ifeq ($(USE_EXCEPTIONS),1)
|
||||
__EXCEPTIONSFLAG_6 =
|
||||
endif
|
||||
ifeq ($(WXUNIV),1)
|
||||
__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
|
||||
endif
|
||||
ifeq ($(WXUNIV),1)
|
||||
__WXUNIV_DEFINE_p_1 = --define __WXUNIVERSAL__
|
||||
endif
|
||||
ifeq ($(DEBUG_FLAG),0)
|
||||
__DEBUG_DEFINE_p = -DwxDEBUG_LEVEL=0
|
||||
endif
|
||||
ifeq ($(DEBUG_FLAG),0)
|
||||
__DEBUG_DEFINE_p_1 = --define wxDEBUG_LEVEL=0
|
||||
endif
|
||||
ifeq ($(BUILD),release)
|
||||
__NDEBUG_DEFINE_p = -DNDEBUG
|
||||
endif
|
||||
ifeq ($(BUILD),release)
|
||||
__NDEBUG_DEFINE_p_1 = --define NDEBUG
|
||||
endif
|
||||
ifeq ($(USE_EXCEPTIONS),0)
|
||||
__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
|
||||
endif
|
||||
ifeq ($(USE_EXCEPTIONS),0)
|
||||
__EXCEPTIONS_DEFINE_p_1 = --define wxNO_EXCEPTIONS
|
||||
endif
|
||||
ifeq ($(USE_RTTI),0)
|
||||
__RTTI_DEFINE_p = -DwxNO_RTTI
|
||||
endif
|
||||
ifeq ($(USE_RTTI),0)
|
||||
__RTTI_DEFINE_p_1 = --define wxNO_RTTI
|
||||
endif
|
||||
ifeq ($(USE_THREADS),0)
|
||||
__THREAD_DEFINE_p = -DwxNO_THREADS
|
||||
endif
|
||||
ifeq ($(USE_THREADS),0)
|
||||
__THREAD_DEFINE_p_1 = --define wxNO_THREADS
|
||||
endif
|
||||
ifeq ($(USE_CAIRO),1)
|
||||
____CAIRO_INCLUDEDIR_FILENAMES_p = -I$(CAIRO_ROOT)\include\cairo
|
||||
endif
|
||||
ifeq ($(USE_CAIRO),1)
|
||||
__CAIRO_INCLUDEDIR_p = --include-dir $(CAIRO_ROOT)/include/cairo
|
||||
endif
|
||||
ifeq ($(SHARED),1)
|
||||
__DLLFLAG_p = -DWXUSINGDLL
|
||||
endif
|
||||
ifeq ($(SHARED),1)
|
||||
__DLLFLAG_p_1 = --define WXUSINGDLL
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),0)
|
||||
__WXLIB_HTML_p = \
|
||||
-lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),0)
|
||||
__WXLIB_XML_p = \
|
||||
-lwxbase$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),0)
|
||||
__WXLIB_CORE_p = \
|
||||
-lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),0)
|
||||
__WXLIB_BASE_p = -lwxbase$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),1)
|
||||
__WXLIB_MONO_p = \
|
||||
-lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),1)
|
||||
ifeq ($(USE_STC),1)
|
||||
__LIB_SCINTILLA_IF_MONO_p = -lwxscintilla$(WXDEBUGFLAG)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(MONOLITHIC),1)
|
||||
ifeq ($(USE_STC),1)
|
||||
__LIB_LEXILLA_IF_MONO_p = $(__LIB_LEXILLA_p)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(USE_STC),1)
|
||||
__LIB_LEXILLA_p = -lwxlexilla$(WXDEBUGFLAG)
|
||||
endif
|
||||
ifeq ($(USE_GUI),1)
|
||||
__LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)
|
||||
endif
|
||||
ifeq ($(USE_GUI),1)
|
||||
__LIB_JPEG_p = -lwxjpeg$(WXDEBUGFLAG)
|
||||
endif
|
||||
ifeq ($(USE_GUI),1)
|
||||
__LIB_PNG_p = -lwxpng$(WXDEBUGFLAG)
|
||||
endif
|
||||
ifeq ($(USE_GUI),1)
|
||||
__LIB_WEBP_p = -lwxwebp$(WXDEBUGFLAG)
|
||||
endif
|
||||
ifeq ($(USE_CAIRO),1)
|
||||
__CAIRO_LIB_p = -lcairo
|
||||
endif
|
||||
ifeq ($(USE_CAIRO),1)
|
||||
____CAIRO_LIBDIR_FILENAMES_p = -L$(CAIRO_ROOT)\lib
|
||||
endif
|
||||
ifeq ($(BUILD),debug)
|
||||
ifeq ($(DEBUG_INFO),default)
|
||||
__DEBUGINFO = -g
|
||||
endif
|
||||
endif
|
||||
ifeq ($(BUILD),release)
|
||||
ifeq ($(DEBUG_INFO),default)
|
||||
__DEBUGINFO =
|
||||
endif
|
||||
endif
|
||||
ifeq ($(DEBUG_INFO),0)
|
||||
__DEBUGINFO =
|
||||
endif
|
||||
ifeq ($(DEBUG_INFO),1)
|
||||
__DEBUGINFO = -g
|
||||
endif
|
||||
ifeq ($(USE_THREADS),0)
|
||||
__THREADSFLAG =
|
||||
endif
|
||||
ifeq ($(USE_THREADS),1)
|
||||
__THREADSFLAG = -mthreads
|
||||
endif
|
||||
|
||||
|
||||
all: $(OBJS)
|
||||
$(OBJS):
|
||||
-if not exist $(OBJS) mkdir $(OBJS)
|
||||
|
||||
### Targets: ###
|
||||
|
||||
all: $(OBJS)\forty.exe data
|
||||
|
||||
clean:
|
||||
-if exist $(OBJS)\*.o del $(OBJS)\*.o
|
||||
-if exist $(OBJS)\*.d del $(OBJS)\*.d
|
||||
-if exist $(OBJS)\forty.exe del $(OBJS)\forty.exe
|
||||
|
||||
$(OBJS)\forty.exe: $(FORTY_OBJECTS) $(OBJS)\forty_forty_rc.o
|
||||
$(foreach f,$(subst \,/,$(FORTY_OBJECTS)),$(shell echo $f >> $(subst \,/,$@).rsp.tmp))
|
||||
@move /y $@.rsp.tmp $@.rsp >nul
|
||||
$(CXX) -o $@ @$@.rsp $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_HTML_p) $(__WXLIB_XML_p) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_LEXILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(__LIB_WEBP_p) -lwxzlib$(WXDEBUGFLAG) -lwxregexu$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lgdiplus -lmsimg32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lws2_32 -lwininet -loleacc -luxtheme
|
||||
@-del $@.rsp
|
||||
|
||||
data:
|
||||
if not exist $(OBJS) mkdir $(OBJS)
|
||||
for %%f in (about.htm) do if not exist $(OBJS)\%%f copy .\%%f $(OBJS)
|
||||
|
||||
$(OBJS)\forty_forty.o: ./forty.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_canvas.o: ./canvas.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_card.o: ./card.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_game.o: ./game.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_pile.o: ./pile.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_playerdg.o: ./playerdg.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_scoredg.o: ./scoredg.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_scorefil.o: ./scorefil.cpp
|
||||
$(CXX) -c -o $@ $(FORTY_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\forty_forty_rc.o: ./forty.rc
|
||||
$(WINDRES) -i$< -o$@ --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) --include-dir $(SETUPHDIR) --include-dir ./../../include $(__CAIRO_INCLUDEDIR_p) --include-dir . $(__DLLFLAG_p_1) --define wxUSE_DPI_AWARE_MANIFEST=$(USE_DPI_AWARE_MANIFEST) --include-dir ./../../samples --define NOPCH
|
||||
|
||||
.PHONY: all clean data
|
||||
|
||||
|
||||
SHELL := $(COMSPEC)
|
||||
|
||||
# Dependencies tracking:
|
||||
-include $(OBJS)/*.d
|
||||
35
libs/wxWidgets-3.3.1/demos/forty/makefile.unx
Normal file
35
libs/wxWidgets-3.3.1/demos/forty/makefile.unx
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# File: Makefile for samples
|
||||
# Author: Robert Roebling
|
||||
# Created: 1999
|
||||
# Updated:
|
||||
# Copyright: (c) 1998 Robert Roebling
|
||||
#
|
||||
# This makefile requires a Unix version of wxWindows
|
||||
# to be installed on your system. This is most often
|
||||
# done typing "make install" when using the complete
|
||||
# sources of wxWindows or by installing the two
|
||||
# RPM packages wxGTK.XXX.rpm and wxGTK-devel.XXX.rpm
|
||||
# under Linux.
|
||||
#
|
||||
|
||||
CC = g++
|
||||
|
||||
PROGRAM = forty
|
||||
|
||||
OBJECTS = $(PROGRAM).o canvas.o card.o game.o pile.o playerdg.o scoredg.o scorefil.o
|
||||
|
||||
# implementation
|
||||
|
||||
.SUFFIXES: .o .cpp
|
||||
|
||||
.cpp.o :
|
||||
$(CXX) -c `wx-config --cxxflags` -o $@ $<
|
||||
|
||||
all: $(PROGRAM)
|
||||
|
||||
$(PROGRAM): $(OBJECTS)
|
||||
$(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROGRAM)
|
||||
481
libs/wxWidgets-3.3.1/demos/forty/makefile.vc
Normal file
481
libs/wxWidgets-3.3.1/demos/forty/makefile.vc
Normal file
@@ -0,0 +1,481 @@
|
||||
# =========================================================================
|
||||
# This makefile was generated by
|
||||
# Bakefile 0.2.13 (http://www.bakefile.org)
|
||||
# Do not modify, all changes will be overwritten!
|
||||
# =========================================================================
|
||||
|
||||
!include <../../build/msw/config.vc>
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Do not modify the rest of this file!
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
### Variables: ###
|
||||
|
||||
WX_RELEASE_NODOT = 33
|
||||
COMPILER_PREFIX = vc
|
||||
OBJS = \
|
||||
$(COMPILER_PREFIX)$(COMPILER_VERSION)$(ARCH_SUFFIX)_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)
|
||||
LIBDIRNAME = \
|
||||
.\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)$(ARCH_SUFFIX)_$(LIBTYPE_SUFFIX)$(CFG)
|
||||
SETUPHDIR = $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)
|
||||
FORTY_CXXFLAGS = /M$(__RUNTIME_LIBS_10)$(__DEBUGRUNTIME_4) /DWIN32 \
|
||||
$(__DEBUGINFO_0) /Fd$(OBJS)\forty.pdb $(____DEBUGRUNTIME_3_p) \
|
||||
$(__OPTIMIZEFLAG_6) /D_CRT_SECURE_NO_DEPRECATE=1 \
|
||||
/D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1 \
|
||||
$(__NO_VC_CRTDBG_p) $(__TARGET_CPU_COMPFLAG_p) /D__WXMSW__ \
|
||||
$(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) \
|
||||
$(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \
|
||||
/I$(SETUPHDIR) /I.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_p) /W4 /I. \
|
||||
$(__DLLFLAG_p) /D_WINDOWS /I.\..\..\samples /DNOPCH $(__RTTIFLAG_11) \
|
||||
$(__EXCEPTIONSFLAG_12) $(CPPFLAGS) $(CXXFLAGS)
|
||||
FORTY_OBJECTS = \
|
||||
$(OBJS)\forty_forty.obj \
|
||||
$(OBJS)\forty_canvas.obj \
|
||||
$(OBJS)\forty_card.obj \
|
||||
$(OBJS)\forty_game.obj \
|
||||
$(OBJS)\forty_pile.obj \
|
||||
$(OBJS)\forty_playerdg.obj \
|
||||
$(OBJS)\forty_scoredg.obj \
|
||||
$(OBJS)\forty_scorefil.obj
|
||||
FORTY_RESOURCES = \
|
||||
$(OBJS)\forty_forty.res
|
||||
|
||||
### Conditionally set variables: ###
|
||||
|
||||
!if "$(TARGET_CPU)" == "AMD64"
|
||||
ARCH_SUFFIX = _x64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "ARM"
|
||||
ARCH_SUFFIX = _arm
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "ARM64"
|
||||
ARCH_SUFFIX = _arm64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "IA64"
|
||||
ARCH_SUFFIX = _ia64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "X64"
|
||||
ARCH_SUFFIX = _x64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "X64"
|
||||
ARCH_SUFFIX = _x64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "x64"
|
||||
ARCH_SUFFIX = _x64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "amd64"
|
||||
ARCH_SUFFIX = _x64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "arm"
|
||||
ARCH_SUFFIX = _arm
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "arm64"
|
||||
ARCH_SUFFIX = _arm64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "ia64"
|
||||
ARCH_SUFFIX = _ia64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "x64"
|
||||
ARCH_SUFFIX = _x64
|
||||
!endif
|
||||
!if "$(USE_GUI)" == "0"
|
||||
PORTNAME = base
|
||||
!endif
|
||||
!if "$(USE_GUI)" == "1"
|
||||
PORTNAME = msw$(TOOLKIT_VERSION)
|
||||
!endif
|
||||
!if "$(OFFICIAL_BUILD)" == "1"
|
||||
COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
WXDEBUGFLAG = d
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
|
||||
WXDEBUGFLAG = d
|
||||
!endif
|
||||
!if "$(WXUNIV)" == "1"
|
||||
WXUNIVNAME = univ
|
||||
!endif
|
||||
!if "$(SHARED)" == "1"
|
||||
WXDLLFLAG = dll
|
||||
!endif
|
||||
!if "$(SHARED)" == "0"
|
||||
LIBTYPE_SUFFIX = lib
|
||||
!endif
|
||||
!if "$(SHARED)" == "1"
|
||||
LIBTYPE_SUFFIX = dll
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "AMD64"
|
||||
LINK_TARGET_CPU = /MACHINE:X64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "ARM"
|
||||
LINK_TARGET_CPU = /MACHINE:ARM
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "ARM64"
|
||||
LINK_TARGET_CPU = /MACHINE:ARM64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "IA64"
|
||||
LINK_TARGET_CPU = /MACHINE:IA64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "X64"
|
||||
LINK_TARGET_CPU = /MACHINE:X64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "X64"
|
||||
LINK_TARGET_CPU = /MACHINE:X64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "x64"
|
||||
LINK_TARGET_CPU = /MACHINE:X64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "amd64"
|
||||
LINK_TARGET_CPU = /MACHINE:X64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "arm"
|
||||
LINK_TARGET_CPU = /MACHINE:ARM
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "arm64"
|
||||
LINK_TARGET_CPU = /MACHINE:ARM64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "ia64"
|
||||
LINK_TARGET_CPU = /MACHINE:IA64
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "x64"
|
||||
LINK_TARGET_CPU = /MACHINE:X64
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "1" && "$(VISUALSTUDIOVERSION)" == "14.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "1" && "$(VISUALSTUDIOVERSION)" == "15.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "1" && "$(VISUALSTUDIOVERSION)" == "16.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "1" && "$(VISUALSTUDIOVERSION)" == "17.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "2" && "$(VISUALSTUDIOVERSION)" == "14.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware_pmv2.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "2" && "$(VISUALSTUDIOVERSION)" == "15.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware_pmv2.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "2" && "$(VISUALSTUDIOVERSION)" == "16.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware_pmv2.manifest
|
||||
!endif
|
||||
!if "$(USE_DPI_AWARE_MANIFEST)" == "2" && "$(VISUALSTUDIOVERSION)" == "17.0"
|
||||
WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \
|
||||
/MANIFESTINPUT:./../../include/wx/msw/wx_dpi_aware_pmv2.manifest
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "0"
|
||||
EXTRALIBS_FOR_BASE =
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "1"
|
||||
EXTRALIBS_FOR_BASE =
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
|
||||
__DEBUGINFO_0 = /Zi
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
|
||||
__DEBUGINFO_0 =
|
||||
!endif
|
||||
!if "$(DEBUG_INFO)" == "0"
|
||||
__DEBUGINFO_0 =
|
||||
!endif
|
||||
!if "$(DEBUG_INFO)" == "1"
|
||||
__DEBUGINFO_0 = /Zi
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
|
||||
__DEBUGINFO_1 = /DEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
|
||||
__DEBUGINFO_1 =
|
||||
!endif
|
||||
!if "$(DEBUG_INFO)" == "0"
|
||||
__DEBUGINFO_1 =
|
||||
!endif
|
||||
!if "$(DEBUG_INFO)" == "1"
|
||||
__DEBUGINFO_1 = /DEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
|
||||
__DEBUGINFO_2 = $(__DEBUGRUNTIME_5)
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
|
||||
__DEBUGINFO_2 =
|
||||
!endif
|
||||
!if "$(DEBUG_INFO)" == "0"
|
||||
__DEBUGINFO_2 =
|
||||
!endif
|
||||
!if "$(DEBUG_INFO)" == "1"
|
||||
__DEBUGINFO_2 = $(__DEBUGRUNTIME_5)
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
____DEBUGRUNTIME_3_p = /D_DEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
____DEBUGRUNTIME_3_p =
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
____DEBUGRUNTIME_3_p =
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
|
||||
____DEBUGRUNTIME_3_p = /D_DEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
____DEBUGRUNTIME_3_p_1 = /d _DEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
____DEBUGRUNTIME_3_p_1 =
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
____DEBUGRUNTIME_3_p_1 =
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
|
||||
____DEBUGRUNTIME_3_p_1 = /d _DEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
__DEBUGRUNTIME_4 = d
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
__DEBUGRUNTIME_4 =
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
__DEBUGRUNTIME_4 =
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
|
||||
__DEBUGRUNTIME_4 = d
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
__DEBUGRUNTIME_5 =
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
__DEBUGRUNTIME_5 = /opt:ref /opt:icf
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
__DEBUGRUNTIME_5 = /opt:ref /opt:icf
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
|
||||
__DEBUGRUNTIME_5 =
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug"
|
||||
__OPTIMIZEFLAG_6 = /Od
|
||||
!endif
|
||||
!if "$(BUILD)" == "release"
|
||||
__OPTIMIZEFLAG_6 = /O2
|
||||
!endif
|
||||
!if "$(USE_THREADS)" == "0"
|
||||
__THREADSFLAG_9 = L
|
||||
!endif
|
||||
!if "$(USE_THREADS)" == "1"
|
||||
__THREADSFLAG_9 = T
|
||||
!endif
|
||||
!if "$(RUNTIME_LIBS)" == "dynamic"
|
||||
__RUNTIME_LIBS_10 = D
|
||||
!endif
|
||||
!if "$(RUNTIME_LIBS)" == "static"
|
||||
__RUNTIME_LIBS_10 = $(__THREADSFLAG_9)
|
||||
!endif
|
||||
!if "$(USE_RTTI)" == "0"
|
||||
__RTTIFLAG_11 = /GR-
|
||||
!endif
|
||||
!if "$(USE_RTTI)" == "1"
|
||||
__RTTIFLAG_11 = /GR
|
||||
!endif
|
||||
!if "$(USE_EXCEPTIONS)" == "0"
|
||||
__EXCEPTIONSFLAG_12 =
|
||||
!endif
|
||||
!if "$(USE_EXCEPTIONS)" == "1"
|
||||
__EXCEPTIONSFLAG_12 = /EHsc
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
__NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
|
||||
__NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__
|
||||
!endif
|
||||
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
__NO_VC_CRTDBG_p_1 = /d __NO_VC_CRTDBG__
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
|
||||
__NO_VC_CRTDBG_p_1 = /d __NO_VC_CRTDBG__
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == ""
|
||||
__TARGET_CPU_COMPFLAG_p = /DTARGET_CPU_COMPFLAG=0
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "X64"
|
||||
__TARGET_CPU_COMPFLAG_p =
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "x64"
|
||||
__TARGET_CPU_COMPFLAG_p =
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == ""
|
||||
__TARGET_CPU_COMPFLAG_p_1 = /d TARGET_CPU_COMPFLAG=0
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "X64"
|
||||
__TARGET_CPU_COMPFLAG_p_1 =
|
||||
!endif
|
||||
!if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "x64"
|
||||
__TARGET_CPU_COMPFLAG_p_1 =
|
||||
!endif
|
||||
!if "$(WXUNIV)" == "1"
|
||||
__WXUNIV_DEFINE_p = /D__WXUNIVERSAL__
|
||||
!endif
|
||||
!if "$(WXUNIV)" == "1"
|
||||
__WXUNIV_DEFINE_p_1 = /d __WXUNIVERSAL__
|
||||
!endif
|
||||
!if "$(DEBUG_FLAG)" == "0"
|
||||
__DEBUG_DEFINE_p = /DwxDEBUG_LEVEL=0
|
||||
!endif
|
||||
!if "$(DEBUG_FLAG)" == "0"
|
||||
__DEBUG_DEFINE_p_1 = /d wxDEBUG_LEVEL=0
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
__NDEBUG_DEFINE_p = /DNDEBUG
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
__NDEBUG_DEFINE_p = /DNDEBUG
|
||||
!endif
|
||||
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
|
||||
__NDEBUG_DEFINE_p_1 = /d NDEBUG
|
||||
!endif
|
||||
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
|
||||
__NDEBUG_DEFINE_p_1 = /d NDEBUG
|
||||
!endif
|
||||
!if "$(USE_EXCEPTIONS)" == "0"
|
||||
__EXCEPTIONS_DEFINE_p = /DwxNO_EXCEPTIONS
|
||||
!endif
|
||||
!if "$(USE_EXCEPTIONS)" == "0"
|
||||
__EXCEPTIONS_DEFINE_p_1 = /d wxNO_EXCEPTIONS
|
||||
!endif
|
||||
!if "$(USE_RTTI)" == "0"
|
||||
__RTTI_DEFINE_p = /DwxNO_RTTI
|
||||
!endif
|
||||
!if "$(USE_RTTI)" == "0"
|
||||
__RTTI_DEFINE_p_1 = /d wxNO_RTTI
|
||||
!endif
|
||||
!if "$(USE_THREADS)" == "0"
|
||||
__THREAD_DEFINE_p = /DwxNO_THREADS
|
||||
!endif
|
||||
!if "$(USE_THREADS)" == "0"
|
||||
__THREAD_DEFINE_p_1 = /d wxNO_THREADS
|
||||
!endif
|
||||
!if "$(USE_CAIRO)" == "1"
|
||||
____CAIRO_INCLUDEDIR_FILENAMES_p = /I$(CAIRO_ROOT)\include\cairo
|
||||
!endif
|
||||
!if "$(USE_CAIRO)" == "1"
|
||||
____CAIRO_INCLUDEDIR_FILENAMES_1_p = /i $(CAIRO_ROOT)\include\cairo
|
||||
!endif
|
||||
!if "$(SHARED)" == "1"
|
||||
__DLLFLAG_p = /DWXUSINGDLL
|
||||
!endif
|
||||
!if "$(SHARED)" == "1"
|
||||
__DLLFLAG_p_1 = /d WXUSINGDLL
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "0"
|
||||
__WXLIB_HTML_p = \
|
||||
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html.lib
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "0"
|
||||
__WXLIB_XML_p = \
|
||||
wxbase$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "0"
|
||||
__WXLIB_CORE_p = \
|
||||
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "0"
|
||||
__WXLIB_BASE_p = \
|
||||
wxbase$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "1"
|
||||
__WXLIB_MONO_p = \
|
||||
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "1" && "$(USE_STC)" == "1"
|
||||
__LIB_SCINTILLA_IF_MONO_p = wxscintilla$(WXDEBUGFLAG).lib
|
||||
!endif
|
||||
!if "$(MONOLITHIC)" == "1" && "$(USE_STC)" == "1"
|
||||
__LIB_LEXILLA_IF_MONO_p = $(__LIB_LEXILLA_p)
|
||||
!endif
|
||||
!if "$(USE_STC)" == "1"
|
||||
__LIB_LEXILLA_p = wxlexilla$(WXDEBUGFLAG).lib
|
||||
!endif
|
||||
!if "$(USE_GUI)" == "1"
|
||||
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
|
||||
!endif
|
||||
!if "$(USE_GUI)" == "1"
|
||||
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
|
||||
!endif
|
||||
!if "$(USE_GUI)" == "1"
|
||||
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
|
||||
!endif
|
||||
!if "$(USE_GUI)" == "1"
|
||||
__LIB_WEBP_p = wxwebp$(WXDEBUGFLAG).lib
|
||||
!endif
|
||||
!if "$(USE_CAIRO)" == "1"
|
||||
__CAIRO_LIB_p = cairo.lib
|
||||
!endif
|
||||
!if "$(USE_CAIRO)" == "1"
|
||||
____CAIRO_LIBDIR_FILENAMES_p = /LIBPATH:$(CAIRO_ROOT)\lib
|
||||
!endif
|
||||
|
||||
|
||||
all: $(OBJS)
|
||||
$(OBJS):
|
||||
-if not exist $(OBJS) mkdir $(OBJS)
|
||||
|
||||
### Targets: ###
|
||||
|
||||
all: $(OBJS)\forty.exe data
|
||||
|
||||
clean:
|
||||
-if exist $(OBJS)\*.obj del $(OBJS)\*.obj
|
||||
-if exist $(OBJS)\*.res del $(OBJS)\*.res
|
||||
-if exist $(OBJS)\*.pch del $(OBJS)\*.pch
|
||||
-if exist $(OBJS)\forty.exe del $(OBJS)\forty.exe
|
||||
-if exist $(OBJS)\forty.ilk del $(OBJS)\forty.ilk
|
||||
-if exist $(OBJS)\forty.pdb del $(OBJS)\forty.pdb
|
||||
|
||||
$(OBJS)\forty.exe: $(FORTY_OBJECTS) $(OBJS)\forty_forty.res
|
||||
link /NOLOGO /OUT:$@ $(__DEBUGINFO_1) /pdb:"$(OBJS)\forty.pdb" $(__DEBUGINFO_2) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) $(WIN32_DPI_LINKFLAG) /SUBSYSTEM:WINDOWS $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) @<<
|
||||
$(FORTY_OBJECTS) $(FORTY_RESOURCES) $(__WXLIB_HTML_p) $(__WXLIB_XML_p) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_LEXILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(__LIB_WEBP_p) wxzlib$(WXDEBUGFLAG).lib wxregexu$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib gdiplus.lib msimg32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib shlwapi.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib version.lib ws2_32.lib wininet.lib
|
||||
<<
|
||||
|
||||
data:
|
||||
if not exist $(OBJS) mkdir $(OBJS)
|
||||
for %f in (about.htm) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
|
||||
|
||||
$(OBJS)\forty_forty.obj: .\forty.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\forty.cpp
|
||||
|
||||
$(OBJS)\forty_canvas.obj: .\canvas.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\canvas.cpp
|
||||
|
||||
$(OBJS)\forty_card.obj: .\card.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\card.cpp
|
||||
|
||||
$(OBJS)\forty_game.obj: .\game.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\game.cpp
|
||||
|
||||
$(OBJS)\forty_pile.obj: .\pile.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\pile.cpp
|
||||
|
||||
$(OBJS)\forty_playerdg.obj: .\playerdg.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\playerdg.cpp
|
||||
|
||||
$(OBJS)\forty_scoredg.obj: .\scoredg.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\scoredg.cpp
|
||||
|
||||
$(OBJS)\forty_scorefil.obj: .\scorefil.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(FORTY_CXXFLAGS) .\scorefil.cpp
|
||||
|
||||
$(OBJS)\forty_forty.res: .\forty.rc
|
||||
rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_3_p_1) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_1) $(__TARGET_CPU_COMPFLAG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) /i $(SETUPHDIR) /i .\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\samples /d NOPCH .\forty.rc
|
||||
|
||||
60
libs/wxWidgets-3.3.1/demos/forty/pictures.xpm
Normal file
60
libs/wxWidgets-3.3.1/demos/forty/pictures.xpm
Normal file
@@ -0,0 +1,60 @@
|
||||
/* XPM */
|
||||
static const char *const Pictures[] = {
|
||||
/* width height num_colors chars_per_pixel */
|
||||
" 120 45 8 1",
|
||||
/* colors */
|
||||
". c #000000",
|
||||
"# c #c0c0c0",
|
||||
"a c #808080",
|
||||
"b c #ff0000",
|
||||
"c c #ffff00",
|
||||
"d c #0000ff",
|
||||
"e c #00ffff",
|
||||
"f c #ffffff",
|
||||
/* pixels */
|
||||
"........................................................................................................................",
|
||||
".fff.fffffff.bb.bb.bb.b.fffffffffffffff..fffffffffff..f..bbc.cc..ffffffffffffff..fff.ffffff.bbccccbcccccbb.ffffffffffff.",
|
||||
".ff.c.fffffff.bbbbbbbb.ffffffffffffffff..fff.ffffff..f.ff.bbc..c.ffffffffffffff..ff.a.ffffff.bbccbbbcccbb.fffffffffffff.",
|
||||
".f.cbc.fffffff........fffffffffffffffff..ff.b.fffff.f.ffff.bb..c..fffffffffffff..f.#af.ffffff.bbbbbbbbbb.ffffffffffffff.",
|
||||
".f.cbc.ffffff.fff.c.c.fffffffffffffffff..ff.b.fffff..f.ff.f.bbc.c.fffffffffffff..f.#af.ffffff............ffffffffffffff.",
|
||||
".ff.c.fffffff.f..f.c.c.ffffffffffffffff..fff.ffffff.f..ff..f.bb..ffffffffffffff..f.#af.ffffff.a..f.fff.f.ffffffffffffff.",
|
||||
".f.cbc.ffffff.f.ff.c.c.ffffffffffffffff..ff.c.fffff.fff.ffff..b.fffffffffffffff..f.#af.ffffff.a.f..fff..f.fffffffffffff.",
|
||||
".f.cbc.fffff.fffff.c.c.ffffffffffffffff..ff.c.fffff.fff.ffff....fffffffffffffff..f.#af.ffffff.a.ffff.ffff.fffffffffffff.",
|
||||
".ff.c.fffff.ffffff.c.c.ffffffffffffffff..ff.c.fffff.fff..fff.b..fffffffffffffff..f.#af.ffffff.a.fffff.fff.fffffffffffff.",
|
||||
".f.cbc.ffff..###ff.c.c.ffffffffffffffff..ff.c.fffff.ffffffff..b.fffffffffffffff..f.#af.ffffff.a.ffff..fff.fffffffffffff.",
|
||||
".f.cbc.ffffff...ff.c.c.ffffffffffffffff..fff.ffffff.ffbbbbff.f...ffffffffffffff..f.#af.fff..f.a..ffffffff.fffffffffffff.",
|
||||
".ff....ffffff.ffff.c.c.ffffffffffffffff..ff....fffff.ffffff.f.f...fffffffffffff..f.#af.fff....a...f....f..fffffffffffff.",
|
||||
".f.ffff.fffff.fffff.c.c.fffffffffffffff..f.ffff.ffff..ffff.f.f.f..fffffffffffff..f.#af.ffff.aaa.a..f.f.f...ffffffffffff.",
|
||||
".f....ff.f.................ffffffffffff..f....ff.f.................ffffffffffff..f.#af.fff...................ffffffffff.",
|
||||
".ff.fff....eddddddddddddddd.....fffffff..f.fffff...ffffffffff.cdbb......fffffff..f.#af.....c.cc..bbbbbb..c......fffffff.",
|
||||
".ff....bbbd.dbcbbbbbbbbbcbdedbbb....fff..f....f.bc.fdddddddf.cdbb.d..f.....ffff..f.#af..cbbcc.cc..bbbb..c......b....fff.",
|
||||
"...bbbb...deedbbcbbcbbcbbbd.dbb.bbbb.....f.fff.fbbc.fffffff.cdbb.d..f..dd.c..ff..........cbbcc.cc......c.....bbbdfff....",
|
||||
".bb....c.ccdeedbbbcccbbbbdedbb.bbb..cc...ff...c.fbbc.fdddf.cdbb.d..f..dd.cccd.f...ffff...dcbbcc.cc....cc...ddbbbdfddddf.",
|
||||
"...cc.c....bd.dbcbbcbbcbbd.db.bb..cbc.b..ff.dccc.bbc.ffff.cdbb.dd..ff...cdcdfd.........f.dcbbacc.cccccc..fdcbdbbdffddff.",
|
||||
"..c....bbbbbdeddddddddddddedbb..cccc.bb..f..fdcdc.bbc.ff.cdbb.dddd..ff.cccdffdc...ffff.f.dcbbcacc.c...c.fdccccdbdffddff.",
|
||||
"...bb.bb....bbbbbbbbbbbbbbbb..ccbbc.bb....ffdfdccc.bbc..cdbb..........cccdfdfbc........f.dcbbccacc.ccb.fdddbdbdbddffffd.",
|
||||
".bbb.b..ccc.d.d.d.d.dd.d.d.d.cccbb.bb.b..cbdfffdccc.fdfdfdfdfdfdfdfd.cccdfffbbc...ffff.f.dcbbacca.bcdcc.caddddcddff..ff.",
|
||||
".bb.bb.ccbcd.d.d.d.ff.d.d.d.dcbcc.bb.bb..cbbddddcdc.dbdbdbdbdbdbdbdb.cdcddddbbc.........ddcddaacc.cdddc.ccaddcdd........",
|
||||
".b.bb.bbccc.d.d.d.dd.d.d.d.d.ccc.bb.bbb..cbbfffdccc.fdfdfdfdfdfdfdfd.cccdfffdbc..ff..ffddcddddaac.ccdcb.accbbcd.f.ffff..",
|
||||
"..bb.cbbcc..bbbbbbbbbbbbbbbb....b..bb....cbfdfdccc..........bbdc..cbb.cccdfdff...dffffddcdbdbddaac.bcc.ccacbbcd.f.......",
|
||||
".bb.cccc..bbdeddddddddddddedbbbbb....c...cdffdccc.ff..dddd.bbdc.ff.cbb.cdcdff.f..ffddffdbdccccdfa.c...c.ccabbcd.f.ffff..",
|
||||
".b.cbc..bb.bd.dbbcbbcbbcbd.db....c.cc.....dfdcdc...ff..dd.bbdc.ffff.cbb.cccd.ff..ffddffdbbdbcdff..cccccc.ccbbcd.f.......",
|
||||
"..cc..bbb.bbdedbbbbcccbbbdeedcc.c....bb..f.dccc.dd..f..d.bbdc.fdddf.cbbf.c...ff..fddddfdbbbddf...cc....cc.cbbcd...ffff..",
|
||||
"....bbbb.bbd.dbbbcbbcbbcbbdeed...bbbb....ff..c.dd..f..d.bbdc.fffffff.cbbf.fff.f.....fffdbbb......c......cc.cbbc.........",
|
||||
".fff....bbbdedbcbbbbbbbbbcbd.dbbb....ff..ffff.....f..d.bbdc.fdddddddf.cb.f....f..fff....bb......c..bbbb..cc.cbbc..fa#.f.",
|
||||
".fffffff.....ddddddddddddddde....fff.ff..fffffff......bbdc.ffffffffff...fffff.f..fffffff.......c..bbbbbb..cc......fa#.f.",
|
||||
".ffffffffffff.................f.ff....f..ffffffffffff.................f.ff....f..ffffffffff...................fff.fa#.f.",
|
||||
".fffffffffffffff.c.c.fffff.fffff.ffff.f..fffffffffffff..f.f.f.ffff..ffff.ffff.f..ffffffffffff...f.f.f..a.aaa.ffff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.ffff.ffffff....ff..fffffffffffff...f.f.ffffff.fffff....ff..fffffffffffff..f....f...a....fff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.ff...ffffff.cbc.f..ffffffffffffff...f.ffbbbbff.ffffff.fff..fffffffffffff.ffffffff..a.f..fff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.ff###..ffff.cbc.f..fffffffffffffff.b..ffffffff.fffff.c.ff..fffffffffffff.fff..ffff.a.ffffff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.ffffff.fffff.c.ff..fffffffffffffff..b.fff..fff.fffff.c.ff..fffffffffffff.fff.fffff.a.ffffff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.fffff.fffff.cbc.f..fffffffffffffff....ffff.fff.fffff.c.ff..fffffffffffff.ffff.ffff.a.ffffff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.ff.f.ffffff.cbc.f..fffffffffffffff.b..ffff.fff.fffff.c.ff..fffffffffffff.f..fff..f.a.ffffff.fa#.f.",
|
||||
".ffffffffffffffff.c.c.f..f.fffffff.c.ff..ffffffffffffff..bb.f..ff..f.ffffff.fff..ffffffffffffff.f.fff.ff.a.ffffff.fa#.f.",
|
||||
".fffffffffffffffff.c.c.fff.ffffff.cbc.f..fffffffffffff.c.cbb.f.ff.f..fffff.b.ff..ffffffffffffff............ffffff.fa#.f.",
|
||||
".fffffffffffffffff........fffffff.cbc.f..fffffffffffff..c..bb.ffff.f.fffff.b.ff..ffffffffffffff.bbbbbbbbbb.ffffff.fa#.f.",
|
||||
".ffffffffffffffff.bbbbbbbb.fffffff.c.ff..ffffffffffffff.c..cbb.ff.f..ffffff.fff..fffffffffffff.bbcccbbbccbb.ffffff.a.ff.",
|
||||
".fffffffffffffff.b.bb.bb.bb.fffffff.fff..ffffffffffffff..cc.cbb..f..fffffffffff..ffffffffffff.bbcccccbccccbb.ffffff.fff.",
|
||||
"........................................................................................................................"
|
||||
};
|
||||
287
libs/wxWidgets-3.3.1/demos/forty/pile.cpp
Normal file
287
libs/wxWidgets-3.3.1/demos/forty/pile.cpp
Normal file
@@ -0,0 +1,287 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: pile.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| The base class for holding piles of playing cards. |
|
||||
//+-------------------------------------------------------------+
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include "card.h"
|
||||
#include "pile.h"
|
||||
#include "forty.h"
|
||||
#include "canvas.h"
|
||||
|
||||
#include "wx/app.h"
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Pile::Pile() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Initialise the pile to be empty of cards. |
|
||||
//+-------------------------------------------------------------+
|
||||
Pile::Pile(int x, int y, int dx, int dy)
|
||||
{
|
||||
m_x = x;
|
||||
m_y = y;
|
||||
m_dx = dx;
|
||||
m_dy = dy;
|
||||
for (m_topCard = 0; m_topCard < NumCards; m_topCard++)
|
||||
{
|
||||
m_cards[m_topCard] = 0;
|
||||
}
|
||||
m_topCard = -1; // i.e. empty
|
||||
}
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Pile::Redraw() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Redraw the pile on the screen. If the pile is empty |
|
||||
//| just draw a null card as a place holder for the pile. |
|
||||
//| Otherwise draw the pile from the bottom up, starting |
|
||||
//| at the origin of the pile, shifting each subsequent |
|
||||
//| card by the pile's x and y offsets. |
|
||||
//+-------------------------------------------------------------+
|
||||
void Pile::Redraw(wxDC& dc )
|
||||
{
|
||||
FortyFrame *frame = (FortyFrame*) wxTheApp->GetTopWindow();
|
||||
wxWindow *canvas = nullptr;
|
||||
if (frame)
|
||||
{
|
||||
canvas = frame->GetCanvas();
|
||||
}
|
||||
|
||||
if (m_topCard >= 0)
|
||||
{
|
||||
if (m_dx == 0 && m_dy == 0)
|
||||
{
|
||||
if ((canvas) && (canvas->IsExposed(m_x,m_y,(int)(Card::GetScale()*60),(int)(Card::GetScale()*200))))
|
||||
m_cards[m_topCard]->Draw(dc, m_x, m_y);
|
||||
}
|
||||
else
|
||||
{
|
||||
int x = m_x;
|
||||
int y = m_y;
|
||||
for (int i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
if ((canvas) && (canvas->IsExposed(x,y,(int)(Card::GetScale()*60),(int)(Card::GetScale()*200))))
|
||||
m_cards[i]->Draw(dc, x, y);
|
||||
x += (int)Card::GetScale()*m_dx;
|
||||
y += (int)Card::GetScale()*m_dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((canvas) && (canvas->IsExposed(m_x,m_y,(int)(Card::GetScale()*60),(int)(Card::GetScale()*200))))
|
||||
Card::DrawNullCard(dc, m_x, m_y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Pile::GetTopCard() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| Return a pointer to the top card in the pile or nullptr |
|
||||
//| if the pile is empty. |
|
||||
//| NB: Gets a copy of the card without removing it from the |
|
||||
//| pile. |
|
||||
//+-------------------------------------------------------------+
|
||||
Card* Pile::GetTopCard()
|
||||
{
|
||||
Card* card = 0;
|
||||
|
||||
if (m_topCard >= 0)
|
||||
{
|
||||
card = m_cards[m_topCard];
|
||||
}
|
||||
return card;
|
||||
}
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Pile::RemoveTopCard() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| If the pile is not empty, remove the top card from the |
|
||||
//| pile and return the pointer to the removed card. |
|
||||
//| If the pile is empty return a null pointer. |
|
||||
//+-------------------------------------------------------------+
|
||||
Card* Pile::RemoveTopCard()
|
||||
{
|
||||
Card* card = 0;
|
||||
|
||||
if (m_topCard >= 0)
|
||||
{
|
||||
card = m_cards[m_topCard--];
|
||||
}
|
||||
return card;
|
||||
}
|
||||
|
||||
|
||||
//+-------------------------------------------------------------+
|
||||
//| Pile::RemoveTopCard() |
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| As RemoveTopCard() but also redraw the top of the pile |
|
||||
//| after the card has been removed. |
|
||||
//| NB: the offset allows for the redrawn area to be in a |
|
||||
//| bitmap ready for 'dragging' cards acrosss the screen. |
|
||||
//+-------------------------------------------------------------+
|
||||
Card* Pile::RemoveTopCard(wxDC& dc, int xOffset, int yOffset)
|
||||
{
|
||||
int topX, topY;
|
||||
|
||||
GetTopCardPos(topX, topY);
|
||||
Card* card = RemoveTopCard();
|
||||
|
||||
if (card)
|
||||
{
|
||||
int x, y;
|
||||
card->Erase(dc, topX - xOffset, topY - yOffset);
|
||||
GetTopCardPos(x, y);
|
||||
if (m_topCard < 0)
|
||||
{
|
||||
Card::DrawNullCard(dc, x - xOffset, y - yOffset);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cards[m_topCard]->Draw(dc, x - xOffset, y - yOffset);
|
||||
}
|
||||
}
|
||||
|
||||
return card;
|
||||
}
|
||||
|
||||
|
||||
void Pile::GetTopCardPos(int& x, int& y)
|
||||
{
|
||||
if (m_topCard < 0)
|
||||
{
|
||||
x = m_x;
|
||||
y = m_y;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = m_x + (int)Card::GetScale()*m_dx * m_topCard;
|
||||
y = m_y + (int)Card::GetScale()*m_dy * m_topCard;
|
||||
}
|
||||
}
|
||||
|
||||
void Pile::AddCard(Card* card)
|
||||
{
|
||||
if (m_topCard < -1) m_topCard = -1;
|
||||
|
||||
m_cards[++m_topCard] = card;
|
||||
}
|
||||
|
||||
void Pile::AddCard(wxDC& dc, Card* card)
|
||||
{
|
||||
AddCard(card);
|
||||
int x, y;
|
||||
GetTopCardPos(x, y);
|
||||
card->Draw(dc, x, y);
|
||||
}
|
||||
|
||||
// Can the card leave this pile.
|
||||
// If it is a member of the pile then the answer is yes.
|
||||
// Derived classes may override this behaviour to incorporate
|
||||
// the rules of the game
|
||||
bool Pile::CanCardLeave(Card* card)
|
||||
{
|
||||
for (int i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
if (card == m_cards[i]) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Calculate how far x, y is from top card in the pile
|
||||
// Returns the square of the distance
|
||||
int Pile::CalcDistance(int x, int y)
|
||||
{
|
||||
int cx, cy;
|
||||
GetTopCardPos(cx, cy);
|
||||
return ((cx - x) * (cx - x) + (cy - y) * (cy - y));
|
||||
}
|
||||
|
||||
|
||||
// Return the card at x, y. Check the top card first, then
|
||||
// work down the pile. If a card is found then return a pointer
|
||||
// to the card, otherwise return nullptr
|
||||
Card* Pile::GetCard(int x, int y)
|
||||
{
|
||||
int cardX;
|
||||
int cardY;
|
||||
GetTopCardPos(cardX, cardY);
|
||||
|
||||
for (int i = m_topCard; i >= 0; i--)
|
||||
{
|
||||
if (x >= cardX && x <= cardX + Card::GetWidth() &&
|
||||
y >= cardY && y <= cardY + Card::GetHeight())
|
||||
{
|
||||
return m_cards[i];
|
||||
}
|
||||
cardX -= (int)Card::GetScale()*m_dx;
|
||||
cardY -= (int)Card::GetScale()*m_dy;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// Return the position of the given card. If it is not a member of this pile
|
||||
// return the origin of the pile.
|
||||
void Pile::GetCardPos(Card* card, int& x, int& y)
|
||||
{
|
||||
x = m_x;
|
||||
y = m_y;
|
||||
|
||||
for (int i = 0; i <= m_topCard; i++)
|
||||
{
|
||||
if (card == m_cards[i])
|
||||
{
|
||||
return;
|
||||
}
|
||||
x += (int)Card::GetScale()*m_dx;
|
||||
y += (int)Card::GetScale()*m_dy;
|
||||
}
|
||||
|
||||
// card not found in pile, return origin of pile
|
||||
x = m_x;
|
||||
y = m_y;
|
||||
}
|
||||
|
||||
|
||||
bool Pile::Overlap(int x, int y)
|
||||
{
|
||||
int cardX;
|
||||
int cardY;
|
||||
GetTopCardPos(cardX, cardY);
|
||||
|
||||
if (x >= cardX - Card::GetWidth() && x <= cardX + Card::GetWidth() &&
|
||||
y >= cardY - Card::GetHeight() && y <= cardY + Card::GetHeight())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
79
libs/wxWidgets-3.3.1/demos/forty/pile.h
Normal file
79
libs/wxWidgets-3.3.1/demos/forty/pile.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: pile.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//+-------------------------------------------------------------+
|
||||
//| Description: |
|
||||
//| The base class for holding piles of playing cards. |
|
||||
//| This is the basic building block for card games. A pile |
|
||||
//| has a position on the screen and an offset for each |
|
||||
//| card placed on it e.g. a pack has no offset, but the |
|
||||
//| discard pile may be fanned out across the screen. |
|
||||
//| |
|
||||
//| The pile knows how to draw itself, though this may be |
|
||||
//| overridden if the default layout needs to be changed. |
|
||||
//| One or more cards can be removed from the top of a pile, |
|
||||
//| and single cards can be added to the top of a pile. |
|
||||
//| Functions are provided which redraw the screen when |
|
||||
//| cards are added or removed. |
|
||||
//| |
|
||||
//| Cards know which way up they are and how to draw |
|
||||
//| themselves. Piles are lists of cards. Piles know which |
|
||||
//| cards they contain and where they are to be drawn. |
|
||||
//+-------------------------------------------------------------+
|
||||
#ifndef _PILE_H_
|
||||
#define _PILE_H_
|
||||
#include "card.h"
|
||||
|
||||
const int NumCards = 2 * PackSize;
|
||||
|
||||
|
||||
//----------------------------------------------------------------//
|
||||
// A class defining a pile of cards with a position on the screen //
|
||||
//----------------------------------------------------------------//
|
||||
class Pile {
|
||||
public:
|
||||
Pile(int x, int y, int dx = 0, int dy = 0);
|
||||
virtual ~Pile(){}
|
||||
|
||||
// General functions
|
||||
virtual void ResetPile() { m_topCard = -1; }
|
||||
virtual void Redraw(wxDC& pDC);
|
||||
|
||||
// Card query functions
|
||||
virtual Card* GetCard(int x, int y); // Get pointer to card at x, y
|
||||
Card* GetTopCard(); // Get pointer to top card
|
||||
virtual void GetCardPos(Card* card, int& x, int& y);
|
||||
// Get position of a card
|
||||
virtual void GetTopCardPos(int& x, int& y);
|
||||
// Get position of the top card
|
||||
int GetNumCards() { return m_topCard + 1; } // Number of cards in pile
|
||||
bool Overlap(int x, int y); // does card at x,y overlap the pile?
|
||||
int CalcDistance(int x, int y); // calculates the square of the distance
|
||||
// of a card at (x,y) from the top of the pile
|
||||
|
||||
// Functions removing one or more cards from the top of a pile
|
||||
virtual bool CanCardLeave(Card* card);
|
||||
Card* RemoveTopCard();
|
||||
virtual Card* RemoveTopCard(wxDC& pDC, int xOffset = 0, int yOffset = 0);
|
||||
|
||||
// Functions to add a card to the top of a pile
|
||||
virtual bool AcceptCard(Card*) { return false; }
|
||||
virtual void AddCard(Card* card); // Add card to top of pile
|
||||
virtual void AddCard(wxDC& pDC, Card* card); // Add card + redraw it
|
||||
void SetPos(int x,int y) {m_x = x;m_y = y;}
|
||||
|
||||
protected:
|
||||
int m_x, m_y; // Position of the pile on the screen
|
||||
int m_dx, m_dy; // Offset when drawing the pile
|
||||
Card* m_cards[NumCards]; // Array of cards in this pile
|
||||
int m_topCard; // Array index of the top card
|
||||
};
|
||||
|
||||
#endif // _PILE_H_
|
||||
133
libs/wxWidgets-3.3.1/demos/forty/playerdg.cpp
Normal file
133
libs/wxWidgets-3.3.1/demos/forty/playerdg.cpp
Normal file
@@ -0,0 +1,133 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: playerdg.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "scorefil.h"
|
||||
#include "playerdg.h"
|
||||
|
||||
const int ID_LISTBOX = 101;
|
||||
|
||||
wxBEGIN_EVENT_TABLE(PlayerSelectionDialog, wxDialog)
|
||||
EVT_SIZE(PlayerSelectionDialog::OnSize)
|
||||
EVT_BUTTON(wxID_OK, PlayerSelectionDialog::ButtonCallback)
|
||||
EVT_BUTTON(wxID_CANCEL, PlayerSelectionDialog::ButtonCallback)
|
||||
EVT_LISTBOX(ID_LISTBOX, PlayerSelectionDialog::SelectCallback)
|
||||
EVT_CLOSE(PlayerSelectionDialog::OnCloseWindow)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
PlayerSelectionDialog::PlayerSelectionDialog(
|
||||
wxWindow* parent,
|
||||
ScoreFile* file
|
||||
) :
|
||||
wxDialog(parent, wxID_ANY, wxT("Player Selection"), wxDefaultPosition),
|
||||
m_scoreFile(file)
|
||||
{
|
||||
wxStaticText* msg = new wxStaticText(this, wxID_ANY, wxT("Please select a name or type a new one:"));
|
||||
|
||||
wxListBox* list = new wxListBox(
|
||||
this, ID_LISTBOX,
|
||||
wxDefaultPosition, wxSize(-1, 150),
|
||||
0, 0,
|
||||
wxLB_SINGLE
|
||||
);
|
||||
|
||||
wxArrayString players;
|
||||
m_scoreFile->GetPlayerList(players);
|
||||
for (unsigned int i = 0; i < players.Count(); i++)
|
||||
{
|
||||
list->Append(players[i]);
|
||||
}
|
||||
|
||||
m_textField = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize);
|
||||
|
||||
m_OK = new wxButton(this, wxID_OK);
|
||||
m_cancel = new wxButton(this, wxID_CANCEL);
|
||||
|
||||
wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
button_sizer->Add( m_OK, 0, wxALL, 10 );
|
||||
button_sizer->Add( m_cancel, 0, wxALL, 10 );
|
||||
|
||||
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
|
||||
topsizer->Add( msg, 0, wxALL , 10 );
|
||||
topsizer->Add( list, 1, wxEXPAND | wxLEFT | wxRIGHT, 10 );
|
||||
topsizer->Add( m_textField, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 10 );
|
||||
topsizer->Add( button_sizer, 0, wxALIGN_LEFT );
|
||||
|
||||
SetSizer( topsizer );
|
||||
|
||||
topsizer->SetSizeHints( this );
|
||||
|
||||
CentreOnParent();
|
||||
|
||||
m_OK->SetDefault();
|
||||
}
|
||||
|
||||
void PlayerSelectionDialog::OnSize(wxSizeEvent& WXUNUSED(event))
|
||||
{
|
||||
Layout();
|
||||
}
|
||||
|
||||
const wxString& PlayerSelectionDialog::GetPlayersName()
|
||||
{
|
||||
/*
|
||||
m_player = wxEmptyString;
|
||||
Show(true);
|
||||
*/
|
||||
return m_player;
|
||||
}
|
||||
|
||||
void PlayerSelectionDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
|
||||
{
|
||||
m_player = wxEmptyString;
|
||||
EndModal(wxID_CANCEL);
|
||||
}
|
||||
|
||||
void PlayerSelectionDialog::SelectCallback(wxCommandEvent& event)
|
||||
{
|
||||
if (event.GetEventType() == wxEVT_LISTBOX)
|
||||
{
|
||||
// if (event.IsSelection())
|
||||
m_textField->SetValue(event.GetString());
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerSelectionDialog::ButtonCallback(wxCommandEvent& event)
|
||||
{
|
||||
if (event.GetId() == wxID_OK)
|
||||
{
|
||||
wxString name = m_textField->GetValue();
|
||||
if ( !name.empty() )
|
||||
{
|
||||
if (name.Contains(wxT('@')))
|
||||
{
|
||||
wxMessageBox(wxT("Names should not contain the '@' character"), wxT("Forty Thieves"));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_player = name;
|
||||
EndModal(wxID_OK);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMessageBox(wxT("Please enter your name"), wxT("Forty Thieves"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_player = wxEmptyString;
|
||||
EndModal(wxID_CANCEL);
|
||||
}
|
||||
}
|
||||
39
libs/wxWidgets-3.3.1/demos/forty/playerdg.h
Normal file
39
libs/wxWidgets-3.3.1/demos/forty/playerdg.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: playerdg.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _PLAYERDG_H_
|
||||
#define _PLAYERDG_H_
|
||||
|
||||
class PlayerSelectionDialog : public wxDialog
|
||||
{
|
||||
public:
|
||||
PlayerSelectionDialog(wxWindow* parent, ScoreFile* file);
|
||||
virtual ~PlayerSelectionDialog(){}
|
||||
|
||||
const wxString& GetPlayersName();
|
||||
void ButtonCallback(wxCommandEvent& event);
|
||||
void SelectCallback(wxCommandEvent& event);
|
||||
void OnSize(wxSizeEvent& event);
|
||||
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
|
||||
protected:
|
||||
friend void SelectCallback(wxListBox&, wxCommandEvent&);
|
||||
void OnCloseWindow(wxCloseEvent& event);
|
||||
|
||||
private:
|
||||
ScoreFile* m_scoreFile;
|
||||
wxString m_player;
|
||||
wxButton* m_OK;
|
||||
wxButton* m_cancel;
|
||||
wxTextCtrl* m_textField;
|
||||
};
|
||||
|
||||
#endif
|
||||
86
libs/wxWidgets-3.3.1/demos/forty/readme.txt
Normal file
86
libs/wxWidgets-3.3.1/demos/forty/readme.txt
Normal file
@@ -0,0 +1,86 @@
|
||||
Forty Thieves is a patience game played with two full packs of
|
||||
cards. At the start of the game forty cards are dealt on the
|
||||
eight 'bases' along the top of the window. The object of the
|
||||
game is to place all the cards onto the eight 'foundations'. The
|
||||
foundations are built starting with the ace and adding cards of
|
||||
the same suit up to the king. Cards are dealt from the pack and
|
||||
placed on the discard pile. Cards may be moved from the discard
|
||||
pile or one of the bases to a base or a foundation. Only one
|
||||
card can be moved at a time. Cards can only be placed on a base
|
||||
if the top card of the base is of the same suit and is one
|
||||
higher in pip value or the base is empty e.g. the eight of
|
||||
spades can only be placed on top of the nine of spades.
|
||||
|
||||
When the mouse cursor is over a card which can be moved it
|
||||
changes to the 'hand' cursor. The card can then be moved by
|
||||
double clicking the left button.
|
||||
|
||||
The mouse cursor also changes to a hand when a card is dragged
|
||||
by placing the cursor over the card and holding down the left
|
||||
button. This feature can be enabled and disabled by selecting
|
||||
the 'Helping hand' option from the Edit menu.
|
||||
|
||||
The 'foundations' are the eight piles of cards down the left
|
||||
side of the window. When the game starts these piles are empty.
|
||||
The object of the game is to place all the cards on the
|
||||
foundations. An ace can be placed on any empty foundation. Other
|
||||
cards can only be placed on a foundation if the top card is of
|
||||
the same suit and is one lower in pip value e.g. the three of
|
||||
clubs can be placed on the four of clubs.
|
||||
|
||||
The 'bases' are the ten piles of cards along the top of the
|
||||
window. At the start of the game four cards are dealt face up on
|
||||
each of the bases. A card can be added to a base if the base is
|
||||
empty or if the top card is of the same suit and is one higher
|
||||
in pip value e.g. the queen of hearts can be placed on the king
|
||||
of hearts The top card of a base can be moved onto another base
|
||||
or a foundation.
|
||||
|
||||
Cards can be only moved one at a time. The top card of the pack
|
||||
can be dealt onto discard pile by placing the mouse cursor over
|
||||
the pack and pressing the left button. The number of cards
|
||||
remaining is displayed to the right of the pack.
|
||||
|
||||
Cards can be moved from the discard pile or the bases either by
|
||||
'double-clicking' or by dragging. If the left button is
|
||||
double-clicked when the mouse cursor is over a card and it can
|
||||
move to another pile, it will do so. This is a quick way of
|
||||
moving cards when their destination is unambiguous.
|
||||
|
||||
A card can be dragged by placing the mouse cursor over the card
|
||||
and holding down the left button. The card will follow the mouse
|
||||
cursor until the left button is released. If the card is over a
|
||||
pile on which it can be placed it will be added to that pile,
|
||||
otherwise it will be returned to the pile from which it was
|
||||
dragged.
|
||||
|
||||
One point is scored for every card that is placed on a
|
||||
foundation. Since there are two packs of 52 cards the maximum
|
||||
score is 104. A record is kept of the number of games played,
|
||||
the number of games won, the current score and the average
|
||||
score. This information is displayed at bottom right of the
|
||||
window and is stored on disk between games. A game is deemed to
|
||||
have started if the cards have been dealt and any card has been
|
||||
moved. If the game is abandoned before it is finished (i.e. by
|
||||
starting a new game or closing window) it counts as a lost game.
|
||||
New players can be added by selecting the 'Player' option from
|
||||
the Game menu. A summary of players' scores can be displayed by
|
||||
selecting the 'Scores...' option from the Game menu.
|
||||
|
||||
All moves are recorded and can be undone. To undo a move select
|
||||
the undo menu item from the Edit menu. A quicker way of undoing
|
||||
is to press the right mouse button (it doesn't matter where the
|
||||
mouse cursor is). Right button undo can be enabled and disabled
|
||||
by selecting the 'Right button undo' option from the Edit menu.
|
||||
Pressing the right mouse button with the control key pressed
|
||||
re-does a previously undone move.
|
||||
|
||||
An empty base or two is very useful as it gives the opportunity
|
||||
to unscramble other bases. Try not to build onto kings which
|
||||
obscure valuable cards as it will be difficult to get to them
|
||||
later. The undo facility is very useful for going back and using
|
||||
'hindsight'.
|
||||
|
||||
Don't be put off if you can't win every game. I reckon winning 1
|
||||
in 10 is pretty good (winning 1 in 3 is excellent).
|
||||
|
||||
202
libs/wxWidgets-3.3.1/demos/forty/scoredg.cpp
Normal file
202
libs/wxWidgets-3.3.1/demos/forty/scoredg.cpp
Normal file
@@ -0,0 +1,202 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: scoredg.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "scorefil.h"
|
||||
#include "scoredg.h"
|
||||
|
||||
// adjust USE_GRID_FOR_SCORE with O or 1 to your preferences
|
||||
// by default it takes wxGrid component for score display if available in target port
|
||||
#define USE_GRID_FOR_SCORE wxUSE_GRID
|
||||
|
||||
#if USE_GRID_FOR_SCORE
|
||||
#include "wx/grid.h"
|
||||
#else
|
||||
class ScoreCanvas : public wxScrolledWindow
|
||||
{
|
||||
public:
|
||||
ScoreCanvas(wxWindow* parent, ScoreFile* scoreFile, const wxPoint& pos, wxSize& size);
|
||||
virtual ~ScoreCanvas();
|
||||
|
||||
void OnDraw(wxDC& dc);
|
||||
|
||||
private:
|
||||
wxFont *m_font;
|
||||
wxString m_text;
|
||||
};
|
||||
|
||||
ScoreCanvas::ScoreCanvas(wxWindow* parent, ScoreFile* scoreFile, const wxPoint& pos, wxSize& size) :
|
||||
wxScrolledWindow(parent, wxID_ANY, pos, size, wxSUNKEN_BORDER)
|
||||
{
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
#ifdef __WXGTK__
|
||||
m_font = wxTheFontList->FindOrCreateFont(wxFontInfo(12).Family(wxFONTFAMILY_ROMAN));
|
||||
#else
|
||||
m_font = wxTheFontList->FindOrCreateFont(wxFontInfo(10).Family(wxFONTFAMILY_SWISS));
|
||||
#endif
|
||||
|
||||
wxArrayString players;
|
||||
scoreFile->GetPlayerList( players);
|
||||
|
||||
wxString os;
|
||||
|
||||
os << wxT("Player\tWins\tGames\tScore\n");
|
||||
for (unsigned int i = 0; i < players.Count(); i++)
|
||||
{
|
||||
int wins, games, score;
|
||||
scoreFile->ReadPlayersScore(players[i], wins, games, score);
|
||||
int average = 0;
|
||||
if (games > 0)
|
||||
{
|
||||
average = (2 * score + games) / (2 * games);
|
||||
}
|
||||
|
||||
os << players[i] << wxT('\t')
|
||||
<< wins << wxT('\t')
|
||||
<< games << wxT('\t')
|
||||
<< average << wxT('\n');
|
||||
}
|
||||
os << wxT('\0');
|
||||
m_text = os;
|
||||
}
|
||||
|
||||
ScoreCanvas::~ScoreCanvas()
|
||||
{
|
||||
}
|
||||
|
||||
void ScoreCanvas::OnDraw(wxDC& dc)
|
||||
{
|
||||
dc.SetFont(* m_font);
|
||||
|
||||
const wxChar* str = m_text.c_str();
|
||||
unsigned int tab = 0;
|
||||
unsigned int tabstops[] = { 5, 100, 150, 200 };
|
||||
|
||||
// get the line spacing for the current font
|
||||
int lineSpacing;
|
||||
{
|
||||
wxCoord w, h;
|
||||
dc.GetTextExtent(wxT("Testing"), &w, &h);
|
||||
lineSpacing = (int)h;
|
||||
}
|
||||
|
||||
int y = 0;
|
||||
while (*str)
|
||||
{
|
||||
wxChar text[256];
|
||||
wxChar* dest = text;
|
||||
|
||||
while (*str && *str >= ' ') *dest++ = *str++;
|
||||
*dest = '\0';
|
||||
|
||||
dc.DrawText(text, FromDIP(tabstops[tab]), y);
|
||||
|
||||
if (*str == '\t')
|
||||
{
|
||||
if (tab < sizeof(tabstops) / sizeof(tabstops[0]) - 1)
|
||||
{
|
||||
tab++;
|
||||
}
|
||||
}
|
||||
else if (*str == '\n')
|
||||
{
|
||||
tab = 0;
|
||||
y += lineSpacing;
|
||||
}
|
||||
if (*str) str++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
wxBEGIN_EVENT_TABLE(ScoreDialog, wxDialog)
|
||||
EVT_CLOSE(ScoreDialog::OnCloseWindow)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
ScoreDialog::ScoreDialog(wxWindow* parent, ScoreFile* file) :
|
||||
wxDialog(parent, wxID_ANY, _("Scores"),
|
||||
wxDefaultPosition, wxSize(400, 300))
|
||||
{
|
||||
// create grid with players
|
||||
wxArrayString players;
|
||||
file->GetPlayerList(players);
|
||||
|
||||
wxSize sz = wxSize(400, 300);
|
||||
|
||||
#if USE_GRID_FOR_SCORE
|
||||
wxGrid* list = new wxGrid(this, wxID_ANY, wxDefaultPosition, sz, 0);
|
||||
list->CreateGrid(players.Count(), 4);
|
||||
for (unsigned int i = 0; i < players.Count(); i++)
|
||||
{
|
||||
int wins, games, score;
|
||||
wxString string_value;
|
||||
|
||||
file->ReadPlayersScore(players[i], wins, games, score);
|
||||
int average = 0;
|
||||
if (games > 0)
|
||||
{
|
||||
average = (2 * score + games) / (2 * games);
|
||||
}
|
||||
list->SetCellValue(i,0,players[i]);
|
||||
string_value.Printf( wxT("%u"), wins );
|
||||
list->SetCellValue(i,1,string_value);
|
||||
string_value.Printf( wxT("%u"), games );
|
||||
list->SetCellValue(i,2,string_value);
|
||||
string_value.Printf( wxT("%u"), average );
|
||||
list->SetCellValue(i,3,string_value);
|
||||
}
|
||||
list->SetColLabelValue(0, wxT("Players"));
|
||||
list->SetColLabelValue(1, wxT("Wins"));
|
||||
list->SetColLabelValue(2, wxT("Games"));
|
||||
list->SetColLabelValue(3, wxT("Score"));
|
||||
list->EnableEditing(false);
|
||||
list->AutoSizeColumns();
|
||||
list->AutoSizeRows();
|
||||
list->SetRowLabelSize(0);
|
||||
list->EnableDragRowSize(false);
|
||||
list->EnableDragColSize(false);
|
||||
list->EnableDragGridSize(false);
|
||||
list->ClearSelection();
|
||||
list->EnableEditing(false);
|
||||
sz.x = wxDefaultCoord;
|
||||
#else
|
||||
ScoreCanvas* list = new ScoreCanvas(this, file, wxDefaultPosition, sz);
|
||||
#endif
|
||||
|
||||
list->SetInitialSize(sz);
|
||||
|
||||
// locate and resize with sizers
|
||||
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
|
||||
topsizer->Add( list, 1, wxALL|wxGROW, 10 );
|
||||
wxButton *button = new wxButton(this, wxID_OK);
|
||||
topsizer->Add( button, 0, wxALIGN_CENTER_HORIZONTAL|wxALL , 10 );
|
||||
button->SetFocus();
|
||||
|
||||
SetSizer( topsizer );
|
||||
|
||||
GetSizer()->Fit(this);
|
||||
GetSizer()->SetSizeHints(this);
|
||||
|
||||
CentreOnParent();
|
||||
}
|
||||
|
||||
void ScoreDialog::Display()
|
||||
{
|
||||
ShowModal();
|
||||
}
|
||||
|
||||
void ScoreDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
|
||||
{
|
||||
EndModal(wxID_OK);
|
||||
}
|
||||
29
libs/wxWidgets-3.3.1/demos/forty/scoredg.h
Normal file
29
libs/wxWidgets-3.3.1/demos/forty/scoredg.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: scoredg.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _SCOREDG_H_
|
||||
#define _SCOREDG_H_
|
||||
|
||||
class ScoreDialog : public wxDialog
|
||||
{
|
||||
public:
|
||||
ScoreDialog(wxWindow* parent, ScoreFile* file);
|
||||
virtual ~ScoreDialog(){}
|
||||
|
||||
void Display();
|
||||
|
||||
protected:
|
||||
void OnCloseWindow(wxCloseEvent& event);
|
||||
|
||||
private:
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
||||
#endif
|
||||
132
libs/wxWidgets-3.3.1/demos/forty/scorefil.cpp
Normal file
132
libs/wxWidgets-3.3.1/demos/forty/scorefil.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: scorefil.cpp
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "wx/textfile.h"
|
||||
#include "wx/config.h"
|
||||
#include "wx/fileconf.h"
|
||||
|
||||
#include "scorefil.h"
|
||||
|
||||
ScoreFile::ScoreFile(const wxString& appName)
|
||||
{
|
||||
m_config = new wxConfig(appName, wxT("wxWidgets"), appName, wxEmptyString,
|
||||
wxCONFIG_USE_LOCAL_FILE); // only local
|
||||
}
|
||||
|
||||
ScoreFile::~ScoreFile()
|
||||
{
|
||||
delete m_config;
|
||||
}
|
||||
|
||||
|
||||
void ScoreFile::GetPlayerList( wxArrayString &list )
|
||||
{
|
||||
m_config->SetPath(wxT("/Players"));
|
||||
int length = m_config->GetNumberOfGroups();
|
||||
|
||||
if (length <= 0) return;
|
||||
|
||||
wxString player;
|
||||
long index;
|
||||
if (m_config->GetFirstGroup(player, index))
|
||||
{
|
||||
list.Add( player );
|
||||
while (m_config->GetNextGroup(player, index))
|
||||
{
|
||||
list.Add( player );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Calculate an encrypted check number to prevent tampering with
|
||||
// score file
|
||||
long ScoreFile::CalcCheck(const wxString& name, int p1, int p2, int p3)
|
||||
{
|
||||
long check = 0;
|
||||
size_t i, max = name.length();
|
||||
|
||||
for(i = 0; i < max; ++i )
|
||||
{
|
||||
check = (check << 1) ^ (long)name[i];
|
||||
check = ((check >> 23) ^ check) & 0xFFFFFF;
|
||||
}
|
||||
check = (check << 1) ^ (long)p1;
|
||||
check = ((check >> 23) ^ check) & 0xFFFFFF;
|
||||
check = (check << 1) ^ (long)p2;
|
||||
check = ((check >> 23) ^ check) & 0xFFFFFF;
|
||||
check = (check << 1) ^ (long)p3;
|
||||
check = ((check >> 23) ^ check) & 0xFFFFFF;
|
||||
return check;
|
||||
}
|
||||
|
||||
wxString ScoreFile::GetPreviousPlayer() const
|
||||
{
|
||||
wxString result;
|
||||
m_config->SetPath(wxT("/General"));
|
||||
m_config->Read(wxT("LastPlayer"), &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
void ScoreFile::ReadPlayersScore(
|
||||
const wxString& player,
|
||||
int& wins,
|
||||
int& games,
|
||||
int& score)
|
||||
{
|
||||
long check = 0;
|
||||
long myWins = 0, myGames = 0, myScore = 0;
|
||||
|
||||
games = wins = score = 0;
|
||||
|
||||
m_config->SetPath(wxT("/Players"));
|
||||
m_config->SetPath(player);
|
||||
if (m_config->Read(wxT("Score"), &myScore, 0L) &&
|
||||
m_config->Read(wxT("Games"), &myGames, 0L) &&
|
||||
m_config->Read(wxT("Wins"), &myWins, 0L) &&
|
||||
m_config->Read(wxT("Check"), &check, 0L))
|
||||
{
|
||||
if (check != CalcCheck(player, myGames, myWins, myScore))
|
||||
{
|
||||
wxMessageBox(wxT("Score file corrupted"), wxT("Warning"),
|
||||
wxOK | wxICON_EXCLAMATION);
|
||||
}
|
||||
else
|
||||
{
|
||||
games = myGames;
|
||||
wins = myWins;
|
||||
score = myScore;
|
||||
}
|
||||
}
|
||||
WritePlayersScore(player, wins, games, score);
|
||||
}
|
||||
|
||||
|
||||
void ScoreFile::WritePlayersScore(const wxString& player, int wins, int games, int score)
|
||||
{
|
||||
if (!player.empty())
|
||||
{
|
||||
m_config->SetPath(wxT("/General"));
|
||||
m_config->Write(wxT("LastPlayer"), wxString(player)); // Without wxString tmp, thinks it's bool in VC++
|
||||
|
||||
m_config->SetPath(wxT("/Players"));
|
||||
m_config->SetPath(player);
|
||||
m_config->Write(wxT("Score"), (long)score);
|
||||
m_config->Write(wxT("Games"), (long)games);
|
||||
m_config->Write(wxT("Wins"), (long)wins);
|
||||
m_config->Write(wxT("Check"), CalcCheck(player, games, wins, score));
|
||||
}
|
||||
}
|
||||
33
libs/wxWidgets-3.3.1/demos/forty/scorefil.h
Normal file
33
libs/wxWidgets-3.3.1/demos/forty/scorefil.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: scorefil.h
|
||||
// Purpose: Forty Thieves patience game
|
||||
// Author: Chris Breeze
|
||||
// Created: 21/07/97
|
||||
// Copyright: (c) 1993-1998 Chris Breeze
|
||||
// Licence: wxWindows licence
|
||||
//---------------------------------------------------------------------------
|
||||
// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _SCOREFILE_H_
|
||||
#define _SCOREFILE_H_
|
||||
|
||||
#include <wx/config.h>
|
||||
|
||||
class ScoreFile {
|
||||
public:
|
||||
ScoreFile(const wxString& appName);
|
||||
virtual ~ScoreFile();
|
||||
|
||||
void GetPlayerList( wxArrayString &list );
|
||||
wxString GetPreviousPlayer() const;
|
||||
|
||||
void ReadPlayersScore(const wxString& player, int& wins, int& games, int &score);
|
||||
void WritePlayersScore(const wxString& player, int wins, int games, int score);
|
||||
|
||||
private:
|
||||
long CalcCheck(const wxString& name, int p1, int p2, int p3);
|
||||
wxString m_configFilename;
|
||||
wxConfig* m_config;
|
||||
};
|
||||
|
||||
#endif
|
||||
93
libs/wxWidgets-3.3.1/demos/forty/symbols.xpm
Normal file
93
libs/wxWidgets-3.3.1/demos/forty/symbols.xpm
Normal file
@@ -0,0 +1,93 @@
|
||||
/* XPM */
|
||||
static const char *const symbols_xpm[] = {
|
||||
/* width height num_colors chars_per_pixel */
|
||||
" 117 70 16 1",
|
||||
/* colors */
|
||||
"` c #ffffff",
|
||||
". c #ff0000",
|
||||
"# c #000000",
|
||||
"a c #b40000",
|
||||
"b c #000000",
|
||||
"c c #000000",
|
||||
"d c #000000",
|
||||
"e c #000000",
|
||||
"f c #000000",
|
||||
"g c #000000",
|
||||
"h c #000000",
|
||||
"i c #000000",
|
||||
"j c #000000",
|
||||
"k c #000000",
|
||||
"l c #000000",
|
||||
"m c #000000",
|
||||
/* pixels */
|
||||
"```#``````.````..`..````#````````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"``###````...``.......``###```````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"`#`#`#``.....`.......`#####``````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"#######..............#######`````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"`#`#`#``.....``.....``#####``````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"```#`````...````...`````#````````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"``###`````.``````.`````###```````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"``###`````.``````.`````###```````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"```#`````...````...`````#````````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"`#`#`#``.....``.....``#####``````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"#######..............#######`````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"`#`#`#``.....`.......`#####``````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"``###````...``.......``###```````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"```#``````.````..`..````#````````````````````````````````````````````````````````````````````````````````````````````",
|
||||
"````###`````````.```````..```..```````#``````````````````````````````````````````````````````````````````````````````",
|
||||
"```#####```````...`````....`....`````###`````````````````````````````````````````````````````````````````````````````",
|
||||
"```#####```````...````...........```#####````````````````````````````````````````````````````````````````````````````",
|
||||
"````###```````.....```...........``#######```````````````````````````````````````````````````````````````````````````",
|
||||
"`##``#``##```.......``...........`#########``````````````````````````````````````````````````````````````````````````",
|
||||
"####`#`####`.........`...........###########`````````````````````````````````````````````````````````````````````````",
|
||||
"###########``.......```.........`###########`````````````````````````````````````````````````````````````````````````",
|
||||
"####`#`####```.....`````.......``####`#`####`````````````````````````````````````````````````````````````````````````",
|
||||
"`##``#``##`````...```````.....````##``#``##``````````````````````````````````````````````````````````````````````````",
|
||||
"````###````````...````````...````````###`````````````````````````````````````````````````````````````````````````````",
|
||||
"``#######```````.``````````.```````#######```````````````````````````````````````````````````````````````````````````",
|
||||
"``#######```````.``````````.```````#######```````````````````````````````````````````````````````````````````````````",
|
||||
"````###````````...````````...````````###`````````````````````````````````````````````````````````````````````````````",
|
||||
"`##``#``##`````...```````.....````##``#``##``````````````````````````````````````````````````````````````````````````",
|
||||
"####`#`####```.....`````.......``####`#`####`````````````````````````````````````````````````````````````````````````",
|
||||
"###########``.......```.........`###########`````````````````````````````````````````````````````````````````````````",
|
||||
"####`#`####`.........`...........###########`````````````````````````````````````````````````````````````````````````",
|
||||
"`##``#``##```.......``...........`#########``````````````````````````````````````````````````````````````````````````",
|
||||
"````###```````.....```...........``#######```````````````````````````````````````````````````````````````````````````",
|
||||
"```#####```````...````...........```#####````````````````````````````````````````````````````````````````````````````",
|
||||
"```#####```````...`````....`....`````###`````````````````````````````````````````````````````````````````````````````",
|
||||
"````###`````````.```````..```..```````#``````````````````````````````````````````````````````````````````````````````",
|
||||
"``##````###``#####````#``#####``###``#####``###```###`#``##``#####``###``#```#```````````````````````````````````````",
|
||||
"`#``#``#```#````#````##``#`````#`````````#`#```#`#```##`#``#````#``#```#`#``#````````````````````````````````````````",
|
||||
"#````#`````#```#````#`#``####``#````````#``#```#`#```##`#``#````#``#```#`#`#`````````````````````````````````````````",
|
||||
"#````#```##```###``#``#``````#`####````#````###```#####`#``#````#``#```#`##``````````````````````````````````````````",
|
||||
"######``#````````#`#####`````#`#```#```#```#```#`````##`#``#````#``#`#`#`#`#`````````````````````````````````````````",
|
||||
"#````#`#`````#```#````#``#```#`#```#```#```#```#````#`#`#``#`#``#``#``#``#``#````````````````````````````````````````",
|
||||
"#````#`#####``###`````#```###```###````#````###````#``#``##```##````##`#`#```#```````````````````````````````````````",
|
||||
"#````#`#####``###```#`````###```###````#````###````#```##``#```##``#`##``#```#```````````````````````````````````````",
|
||||
"#````#`````#`#```#``#````#```#`#```#```#```#```#``#```#``#`#``#``#``#``#``#``#```````````````````````````````````````",
|
||||
"######````#``#`````#####`#`````#```#```#```#```#`#````#``#`#``#````#`#`#```#`#```````````````````````````````````````",
|
||||
"#````#``##````###```#``#`#`````#####```#````###``####`#``#`#``#````#```#````##```````````````````````````````````````",
|
||||
"#````#`#```````#````#`#```####`````#``#````#```#`#```##``#`#``#````#```#```#`#```````````````````````````````````````",
|
||||
"`#``#``#```#``#`````##```````#`````#`#`````#```#`#```##``#`#``#````#```#``#``#```````````````````````````````````````",
|
||||
"``##````###``#####``#````#####``###``#####``###```###``##``#`#####``###``#```#```````````````````````````````````````",
|
||||
"```##``````#####```#######``````##```#######````####```#######```#####````#####``##``###```#######```#####```##````#`",
|
||||
"``####````#######``######``````###```#######```#####```#######``#######``#######`##`#####``#######``#######``##```##`",
|
||||
"`######```##```##`````##``````####```##```````###``````````###``##```##``##```##`##`##`##``````##```##```##``##``###`",
|
||||
"###``###``````###````##``````#####```######```##``````````###```###`###``##```##`##`##`##``````##```##```##``##`###``",
|
||||
"##````##````####````####````###`##```#######``######`````###`````#####```#######`##`##`##``````##```##```##``#####```",
|
||||
"########```####`````#####```##``##````````##``#######````##``````#####````######`##`##`##``````##```##```##``####````",
|
||||
"########``###``````````###``#######```````##``##```##````##`````###`###``````###`##`##`##``````##```####`##``#####```",
|
||||
"##````##``##```````##```##``#######``##```##``##```##````##`````##```##`````###``##`##`##``##``##```##`####``##`###``",
|
||||
"##````##``#######``#######``````##```#######``#######````##`````#######````###```##`#####``######```######```##``###`",
|
||||
"##````##``#######```#####```````##````#####````#####`````##``````#####````###````##``###````####`````######``##```##`",
|
||||
"`##````##`#######```#####````##```````#####````#####``````##`````#####``````###````###``##```####```######```##```##`",
|
||||
"`##````##`#######``#######```##``````#######``#######`````##````#######````###````#####`##``######```######``###``##`",
|
||||
"`##````##``````##``##```##``#######``##```##``##```##`````##````##```##```###`````##`##`##``##``##``####`##```###`##`",
|
||||
"`########`````###``###``````#######``##```````##```##`````##````###`###``###``````##`##`##``##``````##`####````#####`",
|
||||
"`########```####````#####````##``##``##```````#######`````##`````#####```######```##`##`##``##``````##```##`````####`",
|
||||
"`##````##``####``````####````##`###``#######```######````###`````#####```#######``##`##`##``##``````##```##````#####`",
|
||||
"`###``###`###`````````##`````#####````######```````##```###`````###`###``##```##``##`##`##``##``````##```##```###`##`",
|
||||
"``######``##```##````##``````####`````````##``````###``###``````##```##``##```##``##`##`##``##``````##```##``###``##`",
|
||||
"```####```#######```######```###`````#######```#####```#######``#######``#######``#####`##`#######``#######``##```##`",
|
||||
"````##`````#####```#######```##``````#######```####````#######```#####````#####````###``##`#######```#####```#````##`"
|
||||
};
|
||||
Reference in New Issue
Block a user