general_python_programming/hijfong.py
2019-12-24 09:21:18 +00:00

218 lines
5.5 KiB
Python

import random
#from graphics import *
#win = GraphWin()
# library
#import seaborn as sns
#import pandas as pd
#import numpy as np
import math
from Tkinter import *
# (c) R P Clark 2019
def redrawAll(canvas):
canvas.delete(ALL)
# draw a red rectangle on the left half
canvas.create_rectangle(0, 0, 1000, 1000, fill="grey")
# draw semi-transparent rectangles in the middle
def leftclick(event):
print("tricky click")
#print event.x, event.y
r = event.x/1000.0*3.0 -2.0 + rseed
i = (1000-event.y)/1000.0*2.0 -1.0 + iseed
#print "as coords in mandel plane r=",r," i=",i
ro = event.x
io = 1000-event.y
#print "as coords to plot x=",ro," y=",1000-io
mm = mandelbrot(r,i,100)
col = get_col(mm)
io = 1000 - io
canvas.create_rectangle(ro, io, ro+10, io+10, fill=col)
if mm > 98:
print "you are in the STABLE zone "
if mm < 21 and mm > 2:
print "you are in the CHAOS zone "
print "Stability factor=",mm," x=",ro,"y=",io
if mm > 65 and mm < 75:
print "you found the RAGGED EDGE OF CHAOS YOU WON with effort level TRICKY"
draw_complete()
def rightclick(event):
print("Easy click")
print event.x, event.y
r = event.x/1000.0*3.0 -2.0 + rseed
i = (1000-event.y)/1000.0*2.0 -1.0 + iseed
#print "as coords in mandel plane r=",r," i=",i
ro = event.x
io = 1000-event.y
#print "as coords to plot x=",ro," y=",1000-io
mm = mandelbrot(r,i,100)
col = get_col(mm)
io = 1000 - io
canvas.create_rectangle(ro, io, ro+10, io+10, fill=col)
if mm > 98:
print "you are in the STABLE zone "
if mm < 21 and mm > 2:
print "you are in the CHAOS zone "
print "Stability factor=",mm," x=",ro,"y=",io
if mm > 20 and mm < 80:
print "you found the RAGGED EDGE OF CHAOS YOU WON with effort level EASY"
draw_complete()
def middleclick(event):
print("middle")
# create the root and the canvas
root = Tk()
canvas = Canvas(root, width=1000, height=1000)
canvas.pack()
canvas.bind("<Button-1>", leftclick)
canvas.bind("<Button-2>", middleclick)
canvas.bind("<Button-3>", rightclick)
# Store canvas in root and in canvas itself for callbacks
root.canvas = canvas.canvas = canvas
# Set up canvas data and call init
canvas.data = { }
redrawAll(canvas)
rot = random.randint(-1570, 1570) / 1000.0
mag = random.randint(500, 2570) / 1000.0
#mag = 0.5
zz = mag * complex(math.cos(rot), math.sin(rot))
print " rotation ", rot, "degrees ", 90*rot/1.57, "zz ", zz
def mandelbrot (re, Im, max_iter):
c = complex (Re,Im)
#print " complex c ",c
c = c * zz
#print " complex c after rotaion with zz",zz, " c is now ", c
z = 0.0j
for i in range (max_iter):
c = complex(re,Im)
c = c * zz
z = z * z + c
if ( z.real * z.real + z.imag * z.imag) > 4:
return i
return max_iter
def get_col(mm):
if ( mm > 99 ):
return "black"
if ( mm > 85 ):
return "blue"
if ( mm > 75 ):
return "cornflowerblue"
if ( mm > 59 ):
return "green"
if ( mm > 40 ):
return "cyan"
if ( mm > 30 ):
return "pink"
if ( mm > 16 ):
return "magenta"
if ( mm > 12 ):
return "red"
if ( mm > 9 ):
return "yellow"
if ( mm > 7 ):
return "gold"
if ( mm > 5 ):
return "orange"
if ( mm >= 3 ):
return "grey"
if ( mm >= 2 ):
return "lightgrey"
if ( mm <= 1 ):
return "white"
columns = 10
rows = 10
print "HijFong"
for Re in range ( -2000, 1000, 333 ):
for Im in range ( -1000, 1000, 200 ):
print mandelbrot(Re/1000.0,Im/1000.0,100),
print
mm = 40
# make sure 0,0 as first answer cannot win
# i.e. in the stable or very chaotic area
while mm < 90 and mm > 10:
r = random.randint(-2000, 1000) / 1000.0
i = random.randint(-1000, 1000) / 1000.0
r = r/3.0
i = i/2.0
mm = mandelbrot(r,i,100)
rseed = r
iseed = i
def draw_complete():
print "draw complete called"
for rr in range (0, 1000, 10):
for ii in range (0, 1000, 10):
r = rr/1000.0*3.0 -2.0 + rseed
i = ii/1000.0*2.0 -1.0 + iseed
#print "as coords in mandel plane r=",r," i=",i
ro = rr
io = 1000-ii
#print "as coords to plot x=",ro," y=",1000-io
mm = mandelbrot(r,i,100)
col = get_col(mm)
#io = 1000 - io
canvas.create_rectangle(ro, io, ro+10, io+10, fill=col)
#rseed = 0
#iseed = 0
#draw_complete()
ro = 0.0
io = 0.0
while 1:
real = raw_input("player 1: Real: ")
imag = raw_input("player 1: Imag: ")
r = r + float(real)/100.0;
i = i - float(imag)/100.0;
ro = ro + float(real)
io = io - float(imag)
mm = mandelbrot(r,i,100)
col = get_col(mm)
canvas.create_rectangle(ro+500, io+500, ro+500+10, io+500+10, fill=col)
if mm > 98:
print "you are in the STABLE zone "
if mm < 21:
print "you are in the CHAOS zone "
print "Stability factor=",mm," x=",ro,"y=",io
if mm == 99: #if mm > 70 and mm < 75:
print "you found the RAGGED EDGE OF CHAOS YOU WON"
draw_complete()
real = raw_input("player 2: Real: ")
imag = raw_input("player 2: Imag: ")
r = r + float(real)/100.0;
i = i - float(imag)/100.0;
ro = ro + float(real)
io = io - float(imag)
mm = mandelbrot(r,i,100)
col = get_col(mm)
canvas.create_rectangle(ro+500, io+500, ro+500+10, io+500+10, fill=col)
if mm > 98:
print "you are in the STABLE zone "
if mm < 21:
print "you are in the CHAOS zone "
print "Stability factor=",mm," x=",ro,"y=",io
if mm == 99: #if mm > 70 and mm < 75:
print "you found the RAGGED EDGE OF CHAOS YOU WON"
draw_complete()