Esempio n. 1
0
File: Rock.py Progetto: prixt/Q-Mok
class Rock(Sprite):
    cell_x = export(int)
    cell_y = export(int)

    @export(int)
    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, val):
        self._value = val

        if val == WHITE:
            self.set_modulate(Color(1.0, 1.0, 1.0, 1))
            self.visible = True
        elif val == BLACK:
            self.set_modulate(Color(0.3, 0.3, 0.3, 1))
            self.visible = True
        elif val == UNKNOWN:
            self.set_modulate(Color(0.1, 0.8, 0.8, 1))
            self.visible = True
        elif val == EMPTY:
            self.visible = False

    def _ready(self):
        self.value = -1
Esempio n. 2
0
class Paddle(Area2D):

    left = export(bool, default=False)
    action_prefix = export(str, default='')

    def _ready(self):
        self.motion = 0
        self.can_move = True
        self.screen_size = self.get_viewport_rect().size
        self.set_process(True)

    def _process(self, delta):
        motion = 0
        if (Input.is_action_pressed(self.action_prefix + "_move_up")):
            motion -= 1
        elif (Input.is_action_pressed(self.action_prefix + "_move_down")):
            motion += 1

        motion *= MOTION_SPEED
        if self.can_move:
            self.translate(Vector2(0, motion * delta))
        
        # set screen limits
        if self.position.y < 0:
            self.position.y = 0
        elif self.position.y > self.screen_size.y:
            self.position.y = self.screen_size.y

    def _on_paddle_area_enter(self, area):
        # random for new direction generated on each peer
        area.bounce(self.left, random())
Esempio n. 3
0
class Pong(Node2D):
    a = export(int)
    b = export(str, default='foo')
    game_finished = signal()

    def _ready(self):
        self.score_left = 0
        self.score_right = 0
        # let each paddle know which one is left, too
        self.get_node("player1").left
        self.get_node("player1").left = True
        self.get_node("player2").left = False
        self.get_node("player1").action_prefix = 'p1'
        self.get_node("player2").action_prefix = 'p2'

    def update_score(self, add_to_left):
        if add_to_left:
            self.score_left += 1
            self.get_node("score_left").set_text(str(self.score_left))
        else:
            self.score_right += 1
            self.get_node("score_right").set_text(str(self.score_right))

        game_ended = False
        if self.score_left == SCORE_TO_WIN:
            self.get_node("winner_left").show()
            game_ended = True
        elif self.score_right == SCORE_TO_WIN:
            self.get_node("winner_right").show()
            game_ended = True

        if game_ended:
            self.get_node("ball").stop()
            self.get_node("player1").can_move = False
            self.get_node("player2").can_move = False
Esempio n. 4
0
class global_py(Node):

    accessors = export(Array, default=Array())
    type = export(str, default="Python")

    def set_accessed(self, name):
        self.accessors.append(name)
Esempio n. 5
0
class player(KinematicBody2D):
		# member variables here, example:
		a = export(int)
		b = export(str, default='foo')

		def _ready(self):
				"""
				Called every time the node is added to the scene.
				Initialization here.
				"""
		pass
Esempio n. 6
0
class new_script(Node):

    # member variables here, example:
    a = export(int)
    b = export(str, default='foo')

    def _ready(self):
        """
        Called every time the node is added to the scene.
        Initialization here.
        """
        pass
Esempio n. 7
0
class Main(Node):

    # member variables here, example:
    a = export(int)
    b = export(str, default='foo')

    def _ready(self):
        """
        Called every time the node is added to the scene.
        Initialization here.
        """
        array_np = np.arange(15).reshape(3, 5)
Esempio n. 8
0
class CFGDownloader(HTTPRequest):

    # member variables here, example:
    a = export(int)
    b = export(str, default='foo')

    def _ready(self):
        os.system("echo TESST")
        """
		Called every time the node is added to the scene.
		Initialization here.
		"""
        pass
class Mob(RigidBody2D):

    min_speed = export(int, default=150)  # Minimum speed range.
    max_speed = export(int, default=250)  # Maximum speed range.

    def _ready(self):
        animated_sprite = self.get_node("AnimatedSprite")

        mob_types = animated_sprite.frames.get_animation_names()

        animated_sprite.animation = mob_types[randrange(len(mob_types))]

    def _on_VisibilityNotifier2D_screen_exited(self):
        self.queue_free()
Esempio n. 10
0
class MyExportedCls(Node2D):

    # member variables here, example:
    a = export(int)
    b = export(str)

    def _ready(self):
        """
        Called every time the node is added to the scene.
        Initialization here.
        """
        print("Hello World !")
        print('OLD ROT:', self.get_rot())
        self.rotate(1.5)
        print('NEW ROT:', self.get_rot())
Esempio n. 11
0
class Polygon2D(Polygon2D):

    # member variables here, example:
    a = export(int)
    b = export(str, default='foo')

    def _ready(self):
        """
        Called every time the node is added to the scene.
        Initialization here.
        """
        self.set_process(True)

    def _process(self, delta):
        self.translate(Vector2(10, 10) * delta)
Esempio n. 12
0
class SkryptPython(gd.Polygon2D):
	# member variables here, example:
	a = gd.export(int, default=150)
	b = gd.export(str, default='foo')
	Pole = gd.export(int, default=333)
	pole2 = gd.export(int, default=450)

	x = 13

	def _ready(self):
		"""
		Called every time the node is added to the scene.
		Initialization here.
		"""
		print(f"Oto python! {self.get_node('polygon2d')} {self.a} {self.b} {self.Pole} {self.pole2}")
Esempio n. 13
0
class Node(Node):

	# member variables here, example:
	a = export(int)
	b = export(str, default='foo')

	def _ready(self):
		"""
		Called every time the node is added to the scene.
		Initialization here.
		"""
		print("Hello from python")
		self.get_node("../DirectionalLight").queue_free()
		self.get_node("../DirectionalLight2").queue_free()
		print_formatted_text("Prompt toolkit alive and well!")
Esempio n. 14
0
class PyNode(Node):
    _ready_called = False
    _overloaded_by_child_prop_value = None

    def _ready(self):
        self._ready_called = True

    def is_ready_called(self):
        return self._ready_called

    def meth(self, attr):
        return attr

    def overloaded_by_child_meth(self, attr):
        return attr

    @staticmethod
    def static_meth(attr):
        return f"static:{attr}"

    prop = export(int)

    @export(str, default="default")
    @property
    def overloaded_by_child_prop(self):
        return self._overloaded_by_child_prop_value

    @overloaded_by_child_prop.setter
    def overloaded_by_child_prop(self, value):
        self._overloaded_by_child_prop_value = value

    def print_tree(self):
        # Overloaded native method
        return """
class Player(Area2D):
    speed = export(int, default=420)
    screen_size = None
    hit = signal()

    def _ready(self):
        self.screen_size = self.get_viewport_rect().size
        self.hide()

    def _process(self, delta):
        velocity = Vector2()

        if Input.is_action_pressed("ui_right"):
            velocity.x += 1
        if Input.is_action_pressed("ui_left"):
            velocity.x -= 1
        if Input.is_action_pressed("ui_down"):
            velocity.y += 1
        if Input.is_action_pressed("ui_up"):
            velocity.y -= 1

        animated_sprite = self.get_node("AnimatedSprite")
        if velocity.length() > 0:
            velocity = velocity.normalized() * self.speed
            animated_sprite.play()
        else:
            animated_sprite.stop()

        self.position += velocity * delta

        # NOTE: It seems you can't set the self.position's x and y values
        # so you'll need to assign a new vector instead.
        self.position = Vector2(
            clamp(self.position.x, 0, self.screen_size.x),
            clamp(self.position.y, 0, self.screen_size.y),
        )

        if velocity.x != 0:
            animated_sprite.animation = "walk"
            animated_sprite.flip_v = False
            animated_sprite.flip_h = velocity.x < 0
        elif velocity.y != 0:
            animated_sprite.animation = "up"
            animated_sprite.flip_v = velocity.y > 0

    def _on_Player_body_entered(self, body):
        self.hide()  # Player disappears after being hit.

        self.call('emit_signal', 'hit')

        # Ensures that the collission shape is not disabled while
        # the Godot is still in the middle of collision processing.
        self.get_node("CollisionShape2D").set_deferred("disabled", True)

    def start(self, pos):
        self.position = pos
        self.show()
        self.get_node("CollisionShape2D").disabled = False
Esempio n. 16
0
class PythonTest(Node2D):

	# member variables here, example:
	a = export(int)
	b = export(str, default='foo')

	def _ready(self):
		"""
		Called every time the node is added to the scene.
		Initialization here.
		"""
		
		#print ('Hello World!')
		pass
		
	def _process(self, delta):
		
		globals.hello = "Hello World!?!{}".format(numpy.zeros(3))
class Node(Node2D):

    # member variables here, example:
    a = export(int)
    b = export(str, default='foo')

    def _ready(self):
        '''ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
		ts = ts.cumsum()
		ts.plot()
		plt.show()'''
        data_file1 = pd.read_csv("Data/data11.csv")
        data_file2 = pd.read_csv("Data/data12.csv")
        data = pd.concat([data_file1.iloc[1:], data_file2[1:]],
                         axis=0,
                         ignore_index=True)
        data.drop(columns=[
            'Date', 'Time GMT -4', 'Latitude', 'Longitude', 'Unnamed: 16'
        ],
                  inplace=True)
        data['Timestamp'] = pd.to_datetime(data.Timestamp, unit='ms')
        data.set_index('Timestamp', inplace=True)
        data.index = data.index.tz_localize('UTC').tz_convert('US/Eastern')

        intervals = []
        for i in range(1, len(data.index)):
            intervals.append((data.index[i] - data.index[i - 1]).seconds)

        cnt = collections.Counter(intervals)
        df_cnt = pd.DataFrame(
            sorted(cnt.items(), key=lambda x: x[1], reverse=True))
        df_cnt.columns = ['Interval (s)', 'Counts']
        print(df_cnt.head(5))

        fig, ax = plt.subplots(figsize=(16, 6))
        for col in data.columns:
            data[col] = data[col].astype('float64')
            data.plot(y=col, use_index=True, ax=ax)
        plt.show()

    def _draw(self):
        self.draw_line(Vector2(10, 10), Vector2(50, 30), Color(1, 1, 0))
Esempio n. 18
0
class access_from_python(Node):

    outcome = export(str, default=None)

    def _ready(self):
        try:
            self.do_test()
        except Exception as exc:
            self.outcome = f"Unexpected error: {exc!r}"
            raise  # Stacktrace will be displayed on stdout this way
        self.outcome = self.outcome or "ok"

    def do_test(self):
        # Test accessing from `Node.get_node`
        for name, type in (("global_py", "Python"), ("global_gd", "GDScript")):
            path = f"/root/{name}"
            node = self.get_node(path)
            if not node:
                self.outcome = f"Cannot retrieve node `{path}`"
                return
            if str(node.type) != type:
                self.outcome = (
                    f"Invalid Node type for `{path}` (expected `{type}`, got `{node.type}`)"
                )
                return
            node.set_accessed("Python")

        # Also test accessing from `godot.globals` module
        if global_import_outcome != "ok":
            self.outcome = global_import_outcome
            return

        from godot import globals as godot_globals

        godot_globals_dir = dir(godot_globals)
        expected_godot_globals_dir = ["global_gd", "global_py"]
        if godot_globals_dir != expected_godot_globals_dir:
            self.outcome = f"Invalid `dir(godot.globals)` (expected: `{expected_godot_globals_dir}`, got `{godot_globals_dir}`)"
            return
        for name, type in (("global_py", "Python"), ("global_gd", "GDScript")):
            node_from_globals = getattr(godot_globals, name)
            if str(node_from_globals.type) != type:
                self.outcome = (
                    f"Invalid Node type for `{path}` (expected `{type}`, got `{node.type}`)"
                )
                return
Esempio n. 19
0
class MyExportedCls(Node2D):
    initialized = False
    _python_prop = None

    def _ready(self):
        self.initialized = True

    def python_method(self, attr):
        return attr

    python_prop_static = export(str)

    @export(int, default=42)
    @property
    def python_prop(self):
        return self._python_prop

    @python_prop.setter
    def python_prop(self, value):
        self._python_prop = value
Esempio n. 20
0
class PromptToolkitApp(Node):

    terminal_path = export(NodePath)
    redirect_stdout = export(bool, default=True)
    redirect_stderr = export(bool, default=False)
    focused = export(bool, default=True)
    app = None

    def _enter_tree(self):
        self.input = create_pipe_input()

    def _ready(self):
        self.terminal = self.get_node(self.terminal_path)
        self.terminal.connect("data_sent", self, "_on_Terminal_data_sent")
        self.terminal.connect("size_changed", self,
                              "_on_Terminal_size_changed")
        if self.focused:
            self.terminal.grab_focus()

        self.stdout = Stdout(writefunc=self._terminal_write)
        self.output = Vt100_Output(stdout=self.stdout,
                                   get_size=self._get_terminal_size,
                                   write_binary=False)

        self.thread = Thread(target=self._main_wrapped)
        self.thread.start()

    def _main_wrapped(self):
        asyncio.set_event_loop(asyncio.new_event_loop())
        with create_app_session(input=self.input, output=self.output):
            # Wait until here to redirect stdout and/or stderr otherwise errors
            # and output from the previous code would be written to the Terminal
            # node rather than editor Output.
            if self.redirect_stdout:
                sys.stdout = self.stdout
            if self.redirect_stderr:
                sys.stderr = self.stdout
            self.main()

    def main(self):
        raise NotImplementedError

    def _get_terminal_size(self) -> Size:
        return Size(self.terminal.rows, self.terminal.cols)

    def _on_Terminal_data_sent(self, data: PoolByteArray) -> None:
        self.input.send_bytes(bytes(data))

    def _on_Terminal_size_changed(self, _new_size: Vector2):
        try:
            self.app._on_resize()
        except AttributeError:
            pass

    def _terminal_write(self, data):
        self.terminal.write(data)
        self.terminal.update()

    def _exit_tree(self):
        self.input.send_bytes(
            b'\x04')  # Sends EOF to input (i.e. typing ctrl+D)
        try:
            self.app.exit()
        except AttributeError:
            pass
        self.thread.join()
Esempio n. 21
0
class Main(gd.Node2D):
    speed = gd.export(float, default=0.1)

    def _ready(self):
        pass
Esempio n. 22
0
class Evolution(Object):

    # member variables here, example:
    #a = export(int)
    #b = export(str, default='foo')
    start = export(bool, default=True)

    def _ready(self):
        self.start = True

    def scaler(self, value, min, max):
        scaled_value = (value - min) / (max - min)
        return scaled_value

    def de_scaler(self, scaled_value, min, max):
        value = (scaled_value * (max - min)) + min
        return value

    def move(self, angle_to_target, distance_to_target, value):
        #print ("done")
        if self.start:

            number_hidden_layers = 5
            number_output_values = 2  # move_angle + move_speed

            #create input array for Multilayer Perceptron
            X_array = numpy.zeros((1, 2))

            X_array[0, 0] = angle_to_target
            X_array[0, 1] = distance_to_target

            # scaling input values
            # scaling angles from radians between 0 and 2pi to between 0 and 1
            X_array[0, 0] = self.scaler(X_array[0, 0], 0, 2 * numpy.pi)
            # scaling speed from between 0 and 100 to between 0 and 1
            X_array[0, 1] = self.scaler(X_array[0, 1], 0, 100)

            #create output array for initial fit
            y_array = numpy.zeros((1, 2))
            y_array[0, 0] = angle_to_target
            y_array[0, 1] = 55
            mlp = MLPRegressor(hidden_layer_sizes=(number_hidden_layers,
                                                   number_output_values),
                               activation='logistic',
                               solver='lbfgs',
                               tol=1e-2,
                               max_iter=10,
                               random_state=0)

            #‘lbfgs’ is an optimizer in the family of quasi-Newton methods.
            mlp.fit(X_array, y_array)
            #The attribute coefs_ contains a list of weight matrices for every layer.
            #print(len(mlp.coefs_[0]))
            #print(numpy.size(mlp.coefs_[0]))
            #print(len(mlp.coefs_[1]))
            #print(numpy.size(mlp.coefs_[1]))

            #The weight matrix at index i holds the weights between the layer i and layer i + 1.
            #mlp.coefs_[0] = numpy.random.rand(number_hidden_layers,number_output_values)
            #mlp.coefs_[1] = numpy.random.rand(number_output_values,number_hidden_layers)
            #y_array = numpy.random.rand(2)
        y_array2 = mlp.predict(X_array)
        #rescaling output values
        y_array2[0, 0] = self.de_scaler(y_array2[0, 0], 0, numpy.pi / 4)

        y_array2[0, 1] = self.de_scaler(y_array2[0, 1], 0, 100)

        value[0] = y_array2[0, 0]  #angle
        value[1] = y_array2[0, 1]  #speed
        print(X_array, y_array2)
Esempio n. 23
0
class Gameplay(Node):
    job = None
    turn = 0

    is_white = export(bool, True)
    is_quantum = export(bool, True)

    def tick(self):
        if self.board.is_cleared:
            return
        if self.turn != 0 and self.turn % 15 == 0:
            self.board.collapse()
            self.timer.start()
            self.timer_timeout()
        self.turn += 1
        self.is_quantum = (self.turn % 3 == 0)
        self.is_white = (self.turn % 2 == 1)
        self.update_status_text()

    def timer_timeout(self):
        self.board.check_job()
        if self.board.is_measuring:
            self.get_node('WaitIndicator').set_visible(True)
            print('Still waiting...')

    def update_status_text(self):
        if self.board.is_cleared:
            return
        if self.board.is_measuring:
            self.status_text.text = 'Collapsing Quantum States...'
        elif self.is_white:
            if self.is_quantum:
                self.status_text.text = 'White\'s Quantum Turn'
            else:
                self.status_text.text = 'White\'s Turn'
        else:
            if self.is_quantum:
                self.status_text.text = 'Black\'s Quantum Turn'
            else:
                self.status_text.text = 'Black\'s Turn'

    def game_over(self, winner):
        self.status_text.text = '%s Wins!' % winner
        self.get_node('Restart').visible = True

    def restart_pressed(self):
        self.get_tree().reload_current_scene()

    def show_circuit(self, text):
        self.circuit_text.set_text(text)
        self.circuit_text.set_visible(True)

    def job_cleanup(self):
        self.circuit_text.set_visible(False)
        self.get_node('WaitIndicator').set_visible(False)
        self.timer.stop()
        self.update_status_text()

    def quantum_toggle(self, button_pressed):
        if button_pressed:
            self.get_node('DeviceName').set_text("Quantum Device:\n" +
                                                 real_name)
        else:
            self.get_node('DeviceName').set_text("Local Simulator")

    def _ready(self):
        self.timer = self.get_node('Timer')
        self.board = self.get_node('Board')
        self.status_text = self.get_node('GameStatus')
        self.circuit_text = self.get_node('CircuitText')
        self.board.connect('game_finished', self, 'game_over')
        self.board.connect('circuit_finished', self, 'show_circuit')
        self.board.connect('job_finished', self, 'job_cleanup')

        self.tick()
Esempio n. 24
0
class WiiBalanceBoard(Control):
    # member variables here, example:
    connected = export(bool, default=False)
    connecting = export(bool, default=False)
    error = export(str, default="")
    com = Vector2()

    _last_off_board_time = 0
    _last_off_board_duration = 0

    _com_mutex = threading.Lock()
    _response_thread = None
    _wiiboard_process = None

    def _ready(self):
        """
		Called every time the node is added to the scene.
		Initialization here.
		"""
        print("creating WiiBalanceBoard response thread")
        self._response_thread = threading.Thread(target=self.response)

        self._response_thread.start()

    def restart(self):
        print("recreating WiiBalanceBoard response thread")
        self._response_thread = threading.Thread(target=self.response)

        self._response_thread.start()

    def shutdown(self):
        self._wiiboard_process.kill()

    def _process(self, delta):
        #label = self.get_node("StatusLabel")

        #if self.connected:
        #	label.text = "Balance board status:\n Connected!"
        #else:
        #	label.text = "Balance board status:\n Disconnected."
        pass

    def response(self):
        #self._wiiboard = WiiboardCOM()

        #wiiboards = wiiboard.discover()
        #print("Found wiiboards: %s", str(wiiboards))

        #if not wiiboards:
        #	self.connected = False
        #	self.error = "Not paired!"

        #address = wiiboards[0]

        #with WiiboardCOM(address) as wiiprint:
        #	self.connected = True
        #
        #	wiiprint.loop()

        self._wiiboard_process = subprocess.Popen(
            ["/usr/bin/python", "wiiboard.py"])

        tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        time.sleep(2)

        tcp_socket.connect(("127.0.0.1", 7375))

        while True:
            tcp_socket.send(b"ping")

            data = tcp_socket.recv(1024).decode("ascii").split("_")

            if len(data) < 3:
                assert (len(data) > 1)

                if data[0] == "connecting":
                    self.connecting = True
                    print("connecting...")
                else:
                    print("searching...")

                time.sleep(2)
                continue

            self.connected = True

            self._com_mutex.acquire()

            self.com.x = float(data[1])
            self.com.y = float(data[2])

            self._com_mutex.release()

            if self.on_board():
                self._last_off_board_duration = 0
            else:
                self._last_off_board_duration += time.monotonic() - \
                        self._last_off_board_time
                self._last_off_board_time = time.monotonic()

        tcp_socket.close()

    @export(bool)
    def on_board(self):
        return self.com.y != -1

    @export(Vector2)
    def get_com(self):
        self._com_mutex.acquire()

        return_value = self.com

        self._com_mutex.release()

        return self.com

    @export(bool)
    def jumped(self):
        return_value = \
         (self.get_com().y != -1) and \
          ((time.monotonic() - self._last_off_board_time) < 1.5) and \
         self._last_off_board_duration < 1.5

        #if return_value:
        #self._last_off_board_time = time.monotonic() - 1.5
        #print("jumped")

        return return_value
Esempio n. 25
0
class Board(TileMap):
    is_measuring = export(bool, False)
    is_cleared = export(bool, False)

    game_finished = signal()
    circuit_finished = signal()
    job_finished = signal()

    gate_start_rock = None
    current_gate = None

    job = None
    backend = sim_backend

    def get_rock(self, x, y):
        return self.rocks_array[TILE_COUNT * y + x]

    def _unhandled_input(self, event):
        if not self.is_measuring and not self.is_cleared:
            if event.is_action_pressed('mouse_left_button'):
                v = self.get_local_mouse_position()
                x = int(v.x // TILE_SIZE)
                y = int(v.y // TILE_SIZE)
                cell = self.get_cell(x, y)
                if cell != -1:
                    rock = self.get_rock(x, y)
                    if rock.value == EMPTY:
                        if self.gameplay.is_quantum:
                            rock.value = UNKNOWN

                            num = len(self.quantum_rocks)
                            self.quantum_rocks[rock.get_name()] = num
                            self.quantum_rocks_inv.append(rock)
                            if not self.gameplay.is_white:
                                self.quantum_operations.append(('x', num))
                            self.quantum_operations.append(('h', num))
                        elif self.gameplay.is_white:
                            rock.value = WHITE
                            self.check_cleared([(x, y)])
                        else:
                            rock.value = BLACK
                            self.check_cleared([(x, y)])
                        self.gameplay.tick()

            elif event.is_action_pressed(
                    'mouse_right_button') and self.gameplay.is_quantum:
                v = self.get_local_mouse_position()
                x = int(v.x // TILE_SIZE)
                y = int(v.y // TILE_SIZE)
                cell = self.get_cell(x, y)
                if cell != -1:
                    rock = self.get_rock(x, y)
                    if rock.value == UNKNOWN:
                        self.gate_start_rock = rock
                        gate = GateScene.instance()
                        gate.position = self.gate_start_rock.position
                        self.gates_node.add_child(gate)
                        self.current_gate = gate

            elif event.is_action_released(
                    'mouse_right_button') and self.current_gate != None:
                diff = self.get_local_mouse_position(
                ) - self.gate_start_rock.get_position()

                cx, cy = self.gate_start_rock.cell_x, self.gate_start_rock.cell_y
                nx, ny = cx, cy

                if diff.x >= 0:
                    if diff.y >= 0:
                        if diff.x >= diff.y:
                            nx += 1
                        else:
                            ny += 1
                    else:
                        if diff.x >= -diff.y:
                            nx += 1
                        else:
                            ny -= 1
                else:
                    if diff.y >= 0:
                        if -diff.x >= diff.y:
                            nx -= 1
                        else:
                            ny += 1
                    else:
                        if -diff.x >= -diff.y:
                            nx -= 1
                        else:
                            ny -= 1

                if nx >= 0 and nx < TILE_COUNT and ny >= 0 and ny < TILE_COUNT:
                    next_rock = self.get_rock(nx, ny)
                    if next_rock.value != EMPTY:
                        a_num = self.quantum_rocks[
                            self.gate_start_rock.get_name()]
                        b_num = 0
                        if next_rock.value != UNKNOWN:
                            b_num = len(self.quantum_rocks)
                            self.quantum_rocks[next_rock.get_name()] = b_num
                            self.quantum_rocks_inv.append(next_rock)
                            if next_rock.value == BLACK:
                                self.quantum_operations.append(('x', b_num))
                            next_rock.value = UNKNOWN
                        else:
                            b_num = self.quantum_rocks[next_rock.get_name()]

                        self.quantum_operations.append(('gate', a_num, b_num))
                        self.quantum_gates.append(self.current_gate)
                        self.gameplay.tick()
                    else:
                        self.current_gate.queue_free()
                else:
                    self.current_gate.queue_free()

                self.gate_start_rock = None
                self.current_gate = None

    def collapse(self):
        register_size = len(self.quantum_rocks)
        circuit_builder = CircuitBuilder(register_size)
        for op in self.quantum_operations:
            circuit_builder.add_operation(op, self.backend)
        qr, cr, circuit = circuit_builder.build()
        circuit_text = circuit.draw(output='text', line_length=75)
        self.emit_signal('circuit_finished', circuit_text.single_string())
        qobj = assemble(transpile(circuit, self.backend, optimization_level=2),
                        self.backend,
                        memory=True,
                        shots=32)
        self.job = self.backend.run(qobj)
        self.is_measuring = True

    def check_job(self):
        if self.job != None:
            status = self.job.status()
            if status == JobStatus.DONE:
                self.cleanup()
                self.emit_signal('job_finished')
            elif status == JobStatus.ERROR or status == JobStatus.CANCELLED:
                raise QiskitError

    def cleanup(self):
        result = self.job.result()

        memory_list = result.get_memory()
        # counts = result.get_counts()
        # memory_list = []
        # for k,v in counts.items():
        #     for _ in range(v):
        #         memory_list.append(k)
        pick = memory_list[0]
        pick = pick[::-1]

        arr = []
        for i, v in enumerate(pick):
            rock = self.quantum_rocks_inv[i]
            if v == '0':
                rock.value = WHITE
            else:
                rock.value = BLACK
            arr.append((rock.cell_x, rock.cell_y))

        self.quantum_rocks.clear()
        self.quantum_rocks_inv.clear()
        self.quantum_operations.clear()
        for gate in self.quantum_gates:
            gate.queue_free()
        self.quantum_gates.clear()

        self.job = None
        self.is_measuring = False

        self.check_cleared(arr)

    def check_cleared(self, arr):
        for v in arr:
            x, y = v[0], v[1]
            value = self.get_rock(x, y).value

            count = 0
            for i in range(-4, 5):
                cx = x + i
                if cx >= 0 and cx < TILE_COUNT and self.get_rock(
                        cx, y).value == value:
                    count += 1
                    if count == 5:
                        return self.cleared(value)
                else:
                    count = 0

            count = 0
            for i in range(-4, 5):
                cy = y + i
                if cy >= 0 and cy < TILE_COUNT and self.get_rock(
                        x, cy).value == value:
                    count += 1
                    if count == 5:
                        return self.cleared(value)
                else:
                    count = 0

            count = 0
            for i in range(-4, 5):
                cx, cy = x + i, y + i
                if cx >= 0 and cx < TILE_COUNT and cy >= 0 and cy < TILE_COUNT and self.get_rock(
                        cx, cy).value == value:
                    count += 1
                    if count == 5:
                        return self.cleared(value)
                else:
                    count = 0

            count = 0
            for i in range(-4, 5):
                cx, cy = x + i, y - i
                if cx >= 0 and cx < TILE_COUNT and cy >= 0 and cy < TILE_COUNT and self.get_rock(
                        cx, cy).value == value:
                    count += 1
                    if count == 5:
                        return self.cleared(value)
                else:
                    count = 0

    def cleared(self, value):
        self.is_cleared = True
        winner = ''
        if value == WHITE:
            winner = 'White'
        else:
            winner = 'Black'
        self.emit_signal('game_finished', winner)

    def quantum_toggle(self, button_pressed):
        if button_pressed:
            self.backend = real_backend
        else:
            self.backend = sim_backend

    def _process(self, dt):
        if self.current_gate != None:
            dv = self.current_gate.position - self.get_local_mouse_position()
            if dv.x >= 0:
                if dv.y >= 0:
                    if dv.x >= dv.y:
                        self.current_gate.rotation_degrees = 180.0
                    else:
                        self.current_gate.rotation_degrees = 270.0
                else:
                    if dv.x >= -dv.y:
                        self.current_gate.rotation_degrees = 180.0
                    else:
                        self.current_gate.rotation_degrees = 90.0
            else:
                if dv.y >= 0:
                    if -dv.x >= dv.y:
                        self.current_gate.rotation_degrees = 0.0
                    else:
                        self.current_gate.rotation_degrees = 270.0
                else:
                    if -dv.x >= -dv.y:
                        self.current_gate.rotation_degrees = 0.0
                    else:
                        self.current_gate.rotation_degrees = 90.0

    def _ready(self):
        self.gameplay = self.get_parent()
        self.rocks_node = self.get_node('Rocks')
        self.gates_node = self.get_node('Gates')

        self.rocks_array = []
        for iy in range(TILE_COUNT):
            for ix in range(TILE_COUNT):
                y = (iy + 0.5) * TILE_SIZE
                x = (ix + 0.5) * TILE_SIZE
                rock = RockScene.instance()
                self.rocks_array.append(rock)
                self.rocks_node.add_child(rock)
                rock.position = Vector2(x, y)
                rock.cell_x, rock.cell_y = ix, iy
        self.quantum_rocks = {}
        self.quantum_rocks_inv = []
        self.quantum_gates = []
        self.quantum_operations = []

        self.set_process(True)
Esempio n. 26
0
class python(Control):
    # member variables here, example:
    command_test = export(str, default="'Jupter Kernel Test: Good!'")
    response = export(str)
    response2 = export(Dictionary)

    def _ready(self):
        """
		Called every time the node is added to the scene.
		Initialization here.
		"""
        #self.execute_command(self.command_test)
        self.response = Array()
        self.response2 = Dictionary()
        print("Python3-Godot Loaded")

    def execute_command(self, command):
        import time
        try:
            from queue import Empty  # Py 3
        except ImportError:
            from Queue import Empty  # Py 2
        km = KernelManager(kernel_name='python')
        km.start_kernel()
        print("Kernel Running: " + str(km.is_alive()))
        try:
            c = km.client()
            msg_id = c.execute(command)
            state = 'busy'
            data = {}
            content_printer = pprint.PrettyPrinter(indent=4)
            content = {}
            while state != 'idle' and c.is_alive():
                try:
                    msg = c.get_iopub_msg(timeout=1)
                    if not 'content' in msg:
                        print("message has no content, moving on...")
                        continue
                    content = msg['content']
                    for info in content:
                        self.response2[info] = content[info]
                    #content_printer.pprint(content)
                #	if 'data' in content:
                #		data=content['data']
                    if 'execution_state' in content:
                        state = content['execution_state']
                except Empty:
                    pass
            #print(str(data))
        except KeyboardInterrupt:
            pass
        finally:
            km.shutdown_kernel()
            #print('Kernel Running Final : ' +  str(km.is_alive()))
            #response = json.dumps(data, ensure_ascii=True)
            #print(type(self.response2))
            content_printer.pprint(self.response2)
            return self.response2

    def remove_ansi(self, line):
        ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]')
        return ansi_escape.sub('', line)