Morpion solitaire/Julia: Difference between revisions

m
link
m (ignore empty playback filenames)
m (link)
 
(3 intermediate revisions by 2 users not shown)
Line 1:
See [[Morpion_solitaire]]
GUI Gtk app version.
 
GUI Gtk app version.
<langsyntaxhighlight lang="julia">using Cairo, Colors, GeometryTypes, Gtk
 
# Note: Eastward and southward are positive directions. Grid coordinates in the
Line 203 ⟶ 204:
set_gtk_property!(gamemode, :active, 0)
modelabel = GtkLabel(modelabels[1])
savegame = GtkButton("Save Game")
push!(hbox1, newgame, gamemode, modelabel)
set_gtk_property!(savegame, :label, "Save Game")
push!(hbox1, newgame, gamemode, savegame, modelabel)
hbox2 = GtkBox(:h)
can = GtkCanvas(500, 500)
Line 220 ⟶ 223:
push!(box, hbox1, hbox2)
solitaire_gotfirst, solp1, solp2 = false, Point2i(0, 0), Point2i(0, 0)
movehistory, colorhistory, playbackmoves = ["(2825,2825)"], Color[], Move[]
game = MorpionGame()
gameover, mode, exitrequested, margin, r, filename = false, 0, false, 10, 16, ""
Line 226 ⟶ 229:
 
function newgame!(w)
empty!(game, gameover, filename, movehistory = MorpionGame(), false, "", ["(25,25)"]
game = MorpionGame()
gameover = false
draw(can)
filename = ""
end
@guarded function solitaireclick!(w, event)
Line 245:
end
move = Move(solp1, d, offset(solp1, solp2))
if isempty(any5inarow(move.p, game.board.points, move.d)) ||
!nooverlap(move, game.moves)
@warn("bad move $move")
else
Line 298 ⟶ 299:
end
xyreference, Rpoint, playbackmoves = readmorpion(filename)
empty!(movehistory = ["(25,25)"]
game = MorpionGame()
gameover = false
Line 312 ⟶ 313:
warn_dialog("Out of moves! Game over.\nTotal moves: $(length(game.moves))", win)
gameover = true
end
function savegametofile(w)
filename = Gtk.save_dialog_native("File Name to Save")
fp = open(filename, "w")
write(fp, prod(["""
#
# R XXXX
# X X
# X X
# XXXX XXXX
# X X
# X X
# XXXX XXXX
# X X
# X X
# XXXX
#
# R = reference point
# List of moves starts with reference point (col,row) i.e. (25,25) below
#
# Annotations:
# Lines are
# (col,row) <direction> <center>
# direction - +
# | up down
# - left right
# \\ left right
# / left right
# center is the distance -2, -1, ..., +2 from
# the move coordinate to the center of the line being drawn
#
(25,25)
"""; [pentasol(m) * "\n" for m in game.moves]]))
close(fp)
end
@guarded draw(can) do widget
Line 371 ⟶ 406:
signal_connect(newgame!, newgame, :clicked)
signal_connect(gamemode!, gamemode, :changed)
signal_connect(savegametofile, savegame, :clicked)
signal_connect(endit, win, :destroy)
 
Line 391 ⟶ 427:
end
 
morpionapp()</syntaxhighlight>
</lang>
4,102

edits