diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 0000000..6458d33 --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,43 @@ +# This workflow will upload a Python Package using Twine when a release is created +# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Upload Python Package + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + python-version: ["3.7", "3.8", "3.9", "3.10"] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python_version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build + - name: Publish package + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/1A2B/client-answerdatalog.csv b/1A2B/client-answerdatalog.csv new file mode 100644 index 0000000..274c005 --- /dev/null +++ b/1A2B/client-answerdatalog.csv @@ -0,0 +1 @@ +1234 \ No newline at end of file diff --git a/1A2B/game(1A2B).py b/1A2B/game(1A2B).py new file mode 100644 index 0000000..eb25af3 --- /dev/null +++ b/1A2B/game(1A2B).py @@ -0,0 +1,76 @@ +import random + +low,high = 0000,9999 +ans = str(random.randrange(low, high,4)) +print("\n") +if len(ans) < 2: + ans = "0"*3 + ans +elif len(ans) < 3: + ans = "0"*2 + ans +elif len(ans) < 4: + ans = "0" + ans +print(list(str(ans))) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + + + +while True: + + print("\n") + guess = input("請輸入一個四位數字:\n") + if len(guess) < 4: + print("請輸入正確的數字") + elif len(guess) > 4: + print("請輸入正確的數字") + else: + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + print(x) + ia = 0 + + + ib = ib + 1 + print(ib,"ib") + for y in list(str(guess)): + print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + print(ia,"ia") + + if ib == ia: + + a = a + 1 + print(a,"A") + break + if not ib == ia: + b = b + 1 + print(b,"B") + + + else: + print("C") + + if a == 4: + break + elif a == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + a = 0 + b = 0 + c = 0 + count = count + 1 +print("目前最高分(猜最少次):",count) \ No newline at end of file diff --git a/1A2B/game(1A2B)20210724-V12-1.py b/1A2B/game(1A2B)20210724-V12-1.py new file mode 100644 index 0000000..821a51f --- /dev/null +++ b/1A2B/game(1A2B)20210724-V12-1.py @@ -0,0 +1,176 @@ +import random +from 海龜模組 import * +回出發點() +設定方向(0) +速度('normal') +隱藏游標() +視窗設定(400, 600) +背景顏色(0,0,0) +畫筆顏色('white') +字型 = ('標楷體',15,'normal') + +''' +low,high = 0000,9999 +ans = str(random.randrange(low, high,4)) +print("\n") +if len(ans) < 2: + ans = "0"*3 + ans +elif len(ans) < 3: + ans = "0"*2 + ans +elif len(ans) < 4: + ans = "0" + ans +print(list(str(ans))) +''' +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + + + +while True: + print("\n") + #guest = input("請輸入一個四位數字:\n") + guest = 輸入文字('提示','請輸入一個四位數字:\n') + 筆跡清除() + if len(guest) < 4: + 寫字('請輸入正確的數字', align='center', font=字型) + print("請輸入正確的數字") + elif len(guest) > 4: + 寫字('請輸入正確的數字', align='center', font=字型) + print("請輸入正確的數字") + + else: + try: + _guest = int(guest) + except: + continue + state = True + for i in list(guest): + if list(guest).count(i) > 1: + 寫字('請輸入正確且不重複的數字', align='center', font=字型) + print("請輸入正確且不重複的數字") + #continue + state = False + break + + if not state: + continue + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + 寫字('%dA'%(a), align='center', font=字型) + print(a,"A") + elif a == 0 and b > 0: + 寫字('%dB'%(b), align='center', font=字型) + print(b,"B") + elif a == 0 and b == 0: + 寫字('C', align='center', font=字型) + print("C") + else: + if b == 0: + 寫字('%dA'%(a), align='center', font=字型) + print(a,"A") + else: + 寫字('%dA%dB'%(a,b), align='center', font=字型) + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + count = count + 1 + #背景顏色(0,0,0) + +寫字('目前最高分(猜最少次):', align='center', font=字型) +print("目前最高分(猜最少次):",count) +完成() \ No newline at end of file diff --git a/1A2B/game(1A2B)20210724-V12-2.py b/1A2B/game(1A2B)20210724-V12-2.py new file mode 100644 index 0000000..f2da195 --- /dev/null +++ b/1A2B/game(1A2B)20210724-V12-2.py @@ -0,0 +1,176 @@ +import random +from 海龜模組 import * +回出發點() +設定方向(0) +速度('normal') +#隱藏游標() +#視窗設定(400, 600) +背景顏色(0,0,0) +畫筆顏色('white') +字型 = ('標楷體',15,'normal') + +''' +low,high = 0000,9999 +ans = str(random.randrange(low, high,4)) +print("\n") +if len(ans) < 2: + ans = "0"*3 + ans +elif len(ans) < 3: + ans = "0"*2 + ans +elif len(ans) < 4: + ans = "0" + ans +print(list(str(ans))) +''' +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + + + +while True: + print("\n") + #guest = input("請輸入一個四位數字:\n") + guest = 輸入文字('提示','請輸入一個四位數字:\n') + 筆跡清除() + if len(guest) < 4: + 寫字('請輸入正確的數字', align='center', font=字型) + print("請輸入正確的數字") + elif len(guest) > 4: + 寫字('請輸入正確的數字', align='center', font=字型) + print("請輸入正確的數字") + + else: + try: + _guest = int(guest) + except: + continue + state = True + for i in list(guest): + if list(guest).count(i) > 1: + 寫字('請輸入正確且不重複的數字', align='center', font=字型) + print("請輸入正確且不重複的數字") + #continue + state = False + break + + if not state: + continue + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + 寫字('%dA'%(a), align='center', font=字型) + print(a,"A") + elif a == 0 and b > 0: + 寫字('%dB'%(b), align='center', font=字型) + print(b,"B") + elif a == 0 and b == 0: + 寫字('C', align='center', font=字型) + print("C") + else: + if b == 0: + 寫字('%dA'%(a), align='center', font=字型) + print(a,"A") + else: + 寫字('%dA%dB'%(a,b), align='center', font=字型) + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + count = count + 1 + #背景顏色(0,0,0) + +寫字('目前最高分(猜最少次):', align='center', font=字型) +print("目前最高分(猜最少次):",count) +完成() \ No newline at end of file diff --git a/1A2B/game(1A2B)20210724-V12.py b/1A2B/game(1A2B)20210724-V12.py new file mode 100644 index 0000000..08078f9 --- /dev/null +++ b/1A2B/game(1A2B)20210724-V12.py @@ -0,0 +1,144 @@ +import random +''' +low,high = 0000,9999 +ans = str(random.randrange(low, high,4)) +print("\n") +if len(ans) < 2: + ans = "0"*3 + ans +elif len(ans) < 3: + ans = "0"*2 + ans +elif len(ans) < 4: + ans = "0" + ans +print(list(str(ans))) +''' +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + + + +while True: + + print("\n") + guest = input("請輸入一個四位數字:\n") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + count = count + 1 +print("目前最高分(猜最少次):",count) \ No newline at end of file diff --git a/1A2B/game_socket-client.py b/1A2B/game_socket-client.py new file mode 100644 index 0000000..41c2131 --- /dev/null +++ b/1A2B/game_socket-client.py @@ -0,0 +1,248 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + + + +file = "answerdatalog.csv" +files = "highest.txt" + + + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +try: + client.connect(('192.168.1.101', port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect(('192.168.1.101', port)) # 服務端ip和埠 +# python3 接收位元組流資料 +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res = data_server.decode() + # 返回結果 + conn.send(res.encode('utf-8')) + #res = int(res) + #print(res) + + conn.send(str(ans).encode('utf-8')) + ans = int(res) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + + break +while bool(res_boolen):# == 1: + print("start") + #label.begin + print("\n") + guest = input("請輸入一個四位數字:\n") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + count = count + 1 +if count+1 == last: + print("加油,繼續保持") +elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() +else: + print("再加油,快破紀錄了") + +second = (second + count) + 1 +print("目前最高分(猜最少次):",count) +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() \ No newline at end of file diff --git a/1A2B/game_socket-client_1P.py b/1A2B/game_socket-client_1P.py new file mode 100644 index 0000000..666e63a --- /dev/null +++ b/1A2B/game_socket-client_1P.py @@ -0,0 +1,283 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import socket +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) + +ans = "" +#ans1_4 = "" +answers = "" +#a = 0 +ans = input("請輸入一個四位數字") +for i in list(ans): + if list(ans).count(i) > 1: + #print("請輸入正確且不重複的數字") + ans = input("請輸入一個正確且不重複的四位數字") + break +answer = list(str(ans)) +#print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +with open(file, 'w') as ansf: + ansf.write(ans) +ansf.close() + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + +""" +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() +""" +if not os.path.exists(files): + last = float("inf") +else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + guest = input("請輸入一個四位數字:") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/1A2B/game_socket-client_2P-gui.py b/1A2B/game_socket-client_2P-gui.py new file mode 100644 index 0000000..6c346d9 --- /dev/null +++ b/1A2B/game_socket-client_2P-gui.py @@ -0,0 +1,279 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code +from tkinter import * +#@with_goto +def main(): + low, high = 1, 100 + #ans = random.randint(low, high) + ans = input("請輸入一個數字") + while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + if not os.path.exists(ip_log): + last_ip = "" + else: + with open(ip_log, 'r') as f: + last_ip = f.read() + f.close() + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not os.path.exists(files): + last = float("inf") + else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + # -*- coding: UTF-8 -*- + import socket + import random + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9) + #for i in range(0,3): + rdn1 = random.randint(0,9) + rdn2 = random.randint(0,9) + rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) + print("port(",rdn,")") + + port = int(input("port=")) + if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + else: + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, port)) # 服務端ip和埠 + except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break + #game begin + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(('0.0.0.0', rdn)) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + """ + f = open(files, "w") + f.write(str(count+1)) + f.close() + """ + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + + if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") + time.sleep(3) + + if count <= 3: + print("太神了吧! 有夠厲害!") + elif count <= 5: + print("也算不錯耶") + elif count <= 10: + print("老大:幫幫忙,振作點") + else: + print("不會吧 腦袋裝醬糊嗎?") + with open(files, 'a') as ansf: + ansf.write(str(count+1) + ",\n") + ansf.close() + """ + ansf = open(file, "a") + ansf.write(str(count+1) + ",\n") + ansf.close() + """ diff --git a/1A2B/game_socket-client_2P.py b/1A2B/game_socket-client_2P.py new file mode 100644 index 0000000..88ad609 --- /dev/null +++ b/1A2B/game_socket-client_2P.py @@ -0,0 +1,301 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +#low,high = 0,9 + +ans = "" +#ans1_4 = "" +answers = "" +#a = 0 +ans = input("請輸入一個四位數字") +for i in list(ans): + if list(ans).count(i) > 1: + #print("請輸入正確且不重複的數字") + ans = input("請輸入一個正確且不重複的四位數字") + break +answer = list(str(ans)) +#print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +with open(file, 'w') as ansf: + ansf.write(ans) +ansf.close() + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + with open(ip_log, 'r') as f: + last_ip = f.read() + f.close() + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + """ + f = open(files) + last = int(f.read()) + f.close() + """ + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print("port(",rdn,")") + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ +else: + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + port = int(input("port=")) + ip = input("ip=") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + guest = input("請輸入一個四位數字:") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for ii in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + #c = c + 1 + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +with open(files, 'a') as ansf: + ansf.write(str(count+1) + ",\n") +ansf.close() +""" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() +""" diff --git a/1A2B/game_socket-client_3P-1.py b/1A2B/game_socket-client_3P-1.py new file mode 100644 index 0000000..0da2c57 --- /dev/null +++ b/1A2B/game_socket-client_3P-1.py @@ -0,0 +1,246 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect(('192.168.1.101', port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/1A2B/game_socket-server.py b/1A2B/game_socket-server.py new file mode 100644 index 0000000..c1d26ff --- /dev/null +++ b/1A2B/game_socket-server.py @@ -0,0 +1,176 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "answerdatalog.csv" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print(rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect(('192.168.1.101', int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(3) +while True: + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + ans = int(data.decode()) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + break +while bool(res_boolen):# == True: + print("start") + #label.begin + print("\n") + guest = input("請輸入一個四位數字:\n") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + count = count + 1 +if count+1 == last: + print("加油,繼續保持") +elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() +else: + print("再加油,快破紀錄了") + +second = (second + count) + 1 +print("目前最高分(猜最少次):",count) +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() \ No newline at end of file diff --git a/1A2B/game_socket-server_1P.py b/1A2B/game_socket-server_1P.py new file mode 100644 index 0000000..8e77e65 --- /dev/null +++ b/1A2B/game_socket-server_1P.py @@ -0,0 +1,410 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +#from goto import with_goto,_make_code +#@with_goto + +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 +file = "server-answerdatalog.csv" +files = "highest.txt" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() + +""" +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() +""" +if not os.path.exists(files): + last = float("inf") +else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print("port=",rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + #ranges = str(low) + "~" + str(high) + ":" + #print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + low,high = 0,9 + + guest = "" + guest1_4 = "" + #answers = "" + a = 0 + + password = [0,1,2,3,4,5,6,7,8,9] + #password = ["0","1","2","3","4","5","6","7","8","9"] + + i = 0 + while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + guest1_4 = password[z] + + guest1_4 = str(guest1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + guest = guest1_4 + str(guest) + #print(ans,"answer") + #answer = list(str(ans)) + #============================================================== + low,high = 0,9 + guest = "" + guest1_4 = "" + #answers = "" + a = 0 + + password = [0,1,2,3,4,5,6,7,8,9] + #password = ["0","1","2","3","4","5","6","7","8","9"] + + i = 0 + while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + guest1_4 = password[z] + + guest1_4 = str(guest1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + guest = guest1_4 + str(guest) + #print(ans,"answer") + #answer = list(str(ans)) + +#============================================================== + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + #goto.begin + + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/1A2B/game_socket-server_2P.py b/1A2B/game_socket-server_2P.py new file mode 100644 index 0000000..23879b2 --- /dev/null +++ b/1A2B/game_socket-server_2P.py @@ -0,0 +1,293 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +#from goto import with_goto,_make_code +#@with_goto + +#low, high = 0, 9 +ans = input("請輸入一個四位數字") +for i in list(ans): + if list(ans).count(i) > 1: + #print("請輸入正確且不重複的數字") + ans = input("請輸入一個正確且不重複的四位數字") + break +answer = list(str(ans)) +#print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + +#ans = random.randint(low, high) +file = "server-answerdatalog.csv" +files = "highest.txt" +count = 0 +second = 0 + +with open(file, 'w') as ansf: + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +""" +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +""" +if not os.path.exists(files): + last = float("inf") +else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + """ + f = open(files) + last = int(f.read()) + f.close() + """ +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print("port(",rdn,")") +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +#guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + + #print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + #if bool(res_guest) and count > 0: + #guest = int(input(ranges)) + #guest = random.randint(low, high) + #guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + guest = input("請輸入一個四位數字:") + + game_msg = "" + game_msg = "對方:"+str(guest)+"\n" + print("你:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +with open(files, 'a') as ansf: + ansf.write(str(count+1) + ",\n") +ansf.close() +""" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() +""" \ No newline at end of file diff --git a/1A2B/game_socket-server_3P.py b/1A2B/game_socket-server_3P.py new file mode 100644 index 0000000..4817231 --- /dev/null +++ b/1A2B/game_socket-server_3P.py @@ -0,0 +1,254 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import asyncio +from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "server-answerdatalog.csv" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print(rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + res = data_server.decode() + print(res) + res_other = res + while res_other == res: + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_other = data_server.decode() + print("收到連線....") + print(res_other) + conn.close() + + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = res_other#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) + +time.sleep(1.5) +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + guest = random.randint(low, high) + guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太小了") + game_msg = "不正確,太小了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太大了") + game_msg = "不正確,太大了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + game_msg = "正確"+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + game_msg = "再加油,快破紀錄了" + client.send(str(game_msg).encode('utf-8')) + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + game_msg = "目前最高分(猜最少次):" + str(second) + client.send(str(game_msg).encode('utf-8')) + break + + else: + print("請輸入正確的數字") + continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/1A2B/highest.txt b/1A2B/highest.txt new file mode 100644 index 0000000..368f89c --- /dev/null +++ b/1A2B/highest.txt @@ -0,0 +1 @@ +28 \ No newline at end of file diff --git a/1A2B/history/game_socket-client_1P.py b/1A2B/history/game_socket-client_1P.py new file mode 100644 index 0000000..eda6f24 --- /dev/null +++ b/1A2B/history/game_socket-client_1P.py @@ -0,0 +1,273 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import socket +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) + +ans = "" +#ans1_4 = "" +answers = "" +#a = 0 +ans = input("請輸入一個四位數字") +for i in list(ans): + if list(ans).count(i) > 1: + #print("請輸入正確且不重複的數字") + ans = input("請輸入一個正確且不重複的四位數字") + break +answer = list(str(ans)) +#print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +with open(file, 'w') as ansf: + ansf.write(ans) +ansf.close() + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + guest = input("請輸入一個四位數字:") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/1A2B/history/game_socket-server_1P.py b/1A2B/history/game_socket-server_1P.py new file mode 100644 index 0000000..3a92910 --- /dev/null +++ b/1A2B/history/game_socket-server_1P.py @@ -0,0 +1,397 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +#from goto import with_goto,_make_code +#@with_goto + +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 +file = "server-answerdatalog.csv" +files = "highest.txt" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print("port=",rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + #ranges = str(low) + "~" + str(high) + ":" + #print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + low,high = 0,9 + + guest = "" + guest1_4 = "" + #answers = "" + a = 0 + + password = [0,1,2,3,4,5,6,7,8,9] + #password = ["0","1","2","3","4","5","6","7","8","9"] + + i = 0 + while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + guest1_4 = password[z] + + guest1_4 = str(guest1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + guest = guest1_4 + str(guest) + #print(ans,"answer") + #answer = list(str(ans)) + #============================================================== + low,high = 0,9 + guest = "" + guest1_4 = "" + #answers = "" + a = 0 + + password = [0,1,2,3,4,5,6,7,8,9] + #password = ["0","1","2","3","4","5","6","7","8","9"] + + i = 0 + while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + guest1_4 = password[z] + + guest1_4 = str(guest1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + guest = guest1_4 + str(guest) + #print(ans,"answer") + #answer = list(str(ans)) + +#============================================================== + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + #goto.begin + + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/1A2B/ip-list b/1A2B/ip-list new file mode 100644 index 0000000..0500f43 --- /dev/null +++ b/1A2B/ip-list @@ -0,0 +1 @@ +25.8.48.90 \ No newline at end of file diff --git a/1A2B/server-answerdatalog.csv b/1A2B/server-answerdatalog.csv new file mode 100644 index 0000000..1f72b9c --- /dev/null +++ b/1A2B/server-answerdatalog.csv @@ -0,0 +1,2 @@ +T: ^:, +6708 \ No newline at end of file diff --git a/V2/answerdatalog.csv b/V2/answerdatalog.csv new file mode 100644 index 0000000..0900bb5 --- /dev/null +++ b/V2/answerdatalog.csv @@ -0,0 +1 @@ +4937 \ No newline at end of file diff --git a/V2/client-answerdatalog.csv b/V2/client-answerdatalog.csv new file mode 100644 index 0000000..5e2e566 --- /dev/null +++ b/V2/client-answerdatalog.csv @@ -0,0 +1,3 @@ +7, +8, +9, diff --git a/V2/game(1A2B).py b/V2/game(1A2B).py new file mode 100644 index 0000000..eb25af3 --- /dev/null +++ b/V2/game(1A2B).py @@ -0,0 +1,76 @@ +import random + +low,high = 0000,9999 +ans = str(random.randrange(low, high,4)) +print("\n") +if len(ans) < 2: + ans = "0"*3 + ans +elif len(ans) < 3: + ans = "0"*2 + ans +elif len(ans) < 4: + ans = "0" + ans +print(list(str(ans))) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + + + +while True: + + print("\n") + guess = input("請輸入一個四位數字:\n") + if len(guess) < 4: + print("請輸入正確的數字") + elif len(guess) > 4: + print("請輸入正確的數字") + else: + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + print(x) + ia = 0 + + + ib = ib + 1 + print(ib,"ib") + for y in list(str(guess)): + print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + print(ia,"ia") + + if ib == ia: + + a = a + 1 + print(a,"A") + break + if not ib == ia: + b = b + 1 + print(b,"B") + + + else: + print("C") + + if a == 4: + break + elif a == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + a = 0 + b = 0 + c = 0 + count = count + 1 +print("目前最高分(猜最少次):",count) \ No newline at end of file diff --git a/V2/game(1A2B)20210724-V12.py b/V2/game(1A2B)20210724-V12.py new file mode 100644 index 0000000..fd05e62 --- /dev/null +++ b/V2/game(1A2B)20210724-V12.py @@ -0,0 +1,152 @@ +import random +''' +low,high = 0000,9999 +ans = str(random.randrange(low, high,4)) +print("\n") +if len(ans) < 2: + ans = "0"*3 + ans +elif len(ans) < 3: + ans = "0"*2 + ans +elif len(ans) < 4: + ans = "0" + ans +print(list(str(ans))) +''' +low,high = 0,9 + +ans = "" +ans1_4 = "" +answers = "" +a = 0 + +password = [0,1,2,3,4,5,6,7,8,9] +#password = ["0","1","2","3","4","5","6","7","8","9"] + +i = 0 +while i < 4: + #ans = "".join(ans) + #print(ans,"aaaaaa") + #print(i,"i") + #z = int(random.randint(low, high)) - int(a) + ''' + print("111") + print(low,high) + ''' + z = random.randint(low, high) + #high = (z - 1)%9 + if i >= 0: + #print(password) + ans1_4 = password[z] + + ans1_4 = str(ans1_4) + password.remove(password[z]) + high = high - 1 + #elif i == 1: + #a = random.randint(0, 1) + #if not high-low <= 0: + #if a == 0: + #print(low,high) + #ans1_4 = str(random.randint(low, high)) + #elif a == 1: + #print(low,high) + #ans1_4 = str(random.randint(int(high + 2), high)) + #elif high-low <= 0: + i = i + 1 + #ans1_4 = str(z) + ans = ans1_4 + str(ans) + #print(ans,"answer") + answer = list(str(ans)) + #print(answer) +#print(ans) +count = 0 +ia = 0 +ib =0 +a = 0 +b = 0 +c = 0 + +file = "answerdatalog.csv" +files = "highest.txt" + +with open(file, 'w') as ansf: + ansf.write(ans) +ansf.close() + +while True: + + print("\n") + guest = input("請輸入一個四位數字:\n") + if len(guest) < 4: + print("請輸入正確的數字") + elif len(guest) > 4: + print("請輸入正確的數字") + + else: + for i in list(guest): + if list(guest).count(i) > 1: + print("請輸入正確且不重複的數字") + break + + ib = 0 + #print(list(guess)) + for x in list(str(ans)): + #print(x) + ia = 0 + + + ib = ib + 1 + #print(ib,"ib") + for y in list(str(guest)): + #print("\t" + y + "\n") + ia = ia + 1 + + if x == y: + + #print(ia,"ia") + + if ib == ia: + + a = a + 1 + #print(a,"A") + break + if not ib == ia: + b = b + 1 + #print(b,"B") + + + else: + pass + #print("C") + if a == 4: + break + elif a > 0 and b == 0: + print(a,"A") + elif a == 0 and b > 0: + print(b,"B") + elif a == 0 and b == 0: + print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + if a == 4: + pass + #break + elif a == 0: + pass + #print("C") + else: + if b == 0: + print(a,"A") + else: + print(a,"A",b,"B") + ''' + a = 0 + b = 0 + c = 0 + count = count + 1 +print("目前最高分(猜最少次):",count) +with open(files, 'w') as f: + f.write(str(count+1)) +f.close() \ No newline at end of file diff --git a/V2/game_socket-client.py b/V2/game_socket-client.py new file mode 100644 index 0000000..2e537f8 --- /dev/null +++ b/V2/game_socket-client.py @@ -0,0 +1,178 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +count = 0 +second = 0 +#print(ans) + + +file = "answerdatalog.csv" +files = "highest.txt" + + + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +try: + client.connect(('192.168.1.101', port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect(('192.168.1.101', port)) # 服務端ip和埠 +# python3 接收位元組流資料 +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res = data_server.decode() + # 返回結果 + conn.send(res.encode('utf-8')) + #res = int(res) + #print(res) + + conn.send(str(ans).encode('utf-8')) + ans = int(res) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + + break +while bool(res_boolen):# == 1: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + msg = '1' + conn.send(msg.encode('utf-8')) + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + msg = '1' + conn.send(msg.encode('utf-8')) + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #goto.begin + else: + print("請輸入正確的數字") + #goto.begin + count = count + 1 + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() \ No newline at end of file diff --git a/V2/game_socket-client_1P.py b/V2/game_socket-client_1P.py new file mode 100644 index 0000000..884e96b --- /dev/null +++ b/V2/game_socket-client_1P.py @@ -0,0 +1,250 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import socket +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-client_2P-gui.py b/V2/game_socket-client_2P-gui.py new file mode 100644 index 0000000..6c346d9 --- /dev/null +++ b/V2/game_socket-client_2P-gui.py @@ -0,0 +1,279 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code +from tkinter import * +#@with_goto +def main(): + low, high = 1, 100 + #ans = random.randint(low, high) + ans = input("請輸入一個數字") + while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + if not os.path.exists(ip_log): + last_ip = "" + else: + with open(ip_log, 'r') as f: + last_ip = f.read() + f.close() + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not os.path.exists(files): + last = float("inf") + else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + # -*- coding: UTF-8 -*- + import socket + import random + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9) + #for i in range(0,3): + rdn1 = random.randint(0,9) + rdn2 = random.randint(0,9) + rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) + print("port(",rdn,")") + + port = int(input("port=")) + if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + else: + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, port)) # 服務端ip和埠 + except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break + #game begin + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(('0.0.0.0', rdn)) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + """ + f = open(files, "w") + f.write(str(count+1)) + f.close() + """ + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + + if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") + time.sleep(3) + + if count <= 3: + print("太神了吧! 有夠厲害!") + elif count <= 5: + print("也算不錯耶") + elif count <= 10: + print("老大:幫幫忙,振作點") + else: + print("不會吧 腦袋裝醬糊嗎?") + with open(files, 'a') as ansf: + ansf.write(str(count+1) + ",\n") + ansf.close() + """ + ansf = open(file, "a") + ansf.write(str(count+1) + ",\n") + ansf.close() + """ diff --git a/V2/game_socket-client_2P.py b/V2/game_socket-client_2P.py new file mode 100644 index 0000000..347ab1d --- /dev/null +++ b/V2/game_socket-client_2P.py @@ -0,0 +1,282 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + with open(ip_log, 'r') as f: + last_ip = f.read() + f.close() + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + with open(files, 'r') as f: + last = f.read() + if not type(last) == int: + last = float("inf") + else: + last = int(last) + f.close() + """ + f = open(files) + last = int(f.read()) + f.close() + """ + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print("port(",rdn,")") + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ +else: + ip = input("ip=") + with open(ip_log, 'w') as f: + f.write(ip) + f.close() + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + port = int(input("port=")) + ip = input("ip=") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + """ + f = open(files, "w") + f.write(str(count+1)) + f.close() + """ + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +with open(files, 'a') as ansf: + ansf.write(str(count+1) + ",\n") +ansf.close() +""" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() +""" diff --git a/V2/game_socket-client_3P-1(2)-V4.py b/V2/game_socket-client_3P-1(2)-V4.py new file mode 100644 index 0000000..2a3c567 --- /dev/null +++ b/V2/game_socket-client_3P-1(2)-V4.py @@ -0,0 +1,249 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() + else: + ip = last_ip +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin + +# 監聽埠 + +while True: + + print("進入等待時間....") + + data_client = client.recv(1024) + if not data_client: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_client.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + client.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_client = client.recv(1024) + res = data_client.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_client = client.recv(1024) + res_boolen = data_client.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_client = client.recv(1024) + res_msg = data_client.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(1.5) + client.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + client.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-client_3P-1-V3.py b/V2/game_socket-client_3P-1-V3.py new file mode 100644 index 0000000..dd3e58c --- /dev/null +++ b/V2/game_socket-client_3P-1-V3.py @@ -0,0 +1,246 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() + else: + ip = last_ip +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin + +# 監聽埠 + +while True: + + print("進入等待時間....") + + data_client = client.recv(1024) + if not data_client: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_client.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + client.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_client = client.recv(1024) + res = data_client.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_client = client.recv(1024) + res_boolen = data_client.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_client = client.recv(1024) + res_msg = data_client.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(1.5) + client.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + client.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-client_3P-1-V4.py b/V2/game_socket-client_3P-1-V4.py new file mode 100644 index 0000000..2a3c567 --- /dev/null +++ b/V2/game_socket-client_3P-1-V4.py @@ -0,0 +1,249 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() + else: + ip = last_ip +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin + +# 監聽埠 + +while True: + + print("進入等待時間....") + + data_client = client.recv(1024) + if not data_client: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_client.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + client.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_client = client.recv(1024) + res = data_client.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_client = client.recv(1024) + res_boolen = data_client.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_client = client.recv(1024) + res_msg = data_client.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(1.5) + client.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + client.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-client_3P-1.py b/V2/game_socket-client_3P-1.py new file mode 100644 index 0000000..cfaa04e --- /dev/null +++ b/V2/game_socket-client_3P-1.py @@ -0,0 +1,248 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() + else: + ip = last_ip +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((localhost, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-client_3P-2-V3.py b/V2/game_socket-client_3P-2-V3.py new file mode 100644 index 0000000..916e45e --- /dev/null +++ b/V2/game_socket-client_3P-2-V3.py @@ -0,0 +1,250 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() + else: + ip = last_ip +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((ip, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + time.sleep(1.5) + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + + break +data = client.recv(1024) # 1024位元組的資料 +data = data.decode() +print(data) +#client.close() +#time.sleep(1) +#game begin + +# 監聽埠 + +while True: + + print("進入等待時間....") + + data_client = client.recv(1024) + if not data_client: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_client.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + client.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_client = client.recv(1024) + res = data_client.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_client = client.recv(1024) + res_boolen = data_client.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_client = client.recv(1024) + res_msg = data_client.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + client.send(msg.encode('utf-8')) + time.sleep(1.5) + client.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + client.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-client_3P-2.py b/V2/game_socket-client_3P-2.py new file mode 100644 index 0000000..098da4c --- /dev/null +++ b/V2/game_socket-client_3P-2.py @@ -0,0 +1,248 @@ +#https://www.itread01.com/article/1510122002.html +#以下為測試版(4) +import os +import random +import time +#from goto import with_goto,_make_code + +#@with_goto + +low, high = 1, 100 +#ans = random.randint(low, high) +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) +count = 0 +second = 0 +#print(ans) + +ip_check = 0 + +file = "client-answerdatalog.csv" +files = "highest.txt" + +ip_log = "ip-list" +if not os.path.exists(ip_log): + last_ip = "" +else: + f = open(ip_log) + last_ip = f.read() + f.close() + ip_check = 1 + + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() + + +# -*- coding: UTF-8 -*- +import socket +import random +# 客戶端 +# 宣告協議型別,同時生成socket物件 +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# +rdn = random.randint(0,9) +#for i in range(0,3): +rdn1 = random.randint(0,9) +rdn2 = random.randint(0,9) +rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) +rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) +print(rdn) + +port = int(input("port=")) +if ip_check == 1: + print(last_ip) + q = input("要使用上一個IP位址嗎?(y/n)") + if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + elif q == "n" or q == "N" or q == "no" or q == "No": + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() + else: + ip = last_ip +else: + ip = input("ip=") + f = open(ip_log,"w") + f.write(ip) + f.close() +try: + client.connect((localhost, port)) # 服務端ip和埠 +except: + print("請輸入正確的數字") + client.connect((ip, port)) # 服務端ip和埠 +# python3 接收位元組流資料 +msg = ip +client.send(msg.encode('utf-8')) +time.sleep(1) +while True: + time.sleep(1.5) + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + print(data.decode()) + client.close() + #time.sleep(1) + break +#game begin +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +server.bind(('0.0.0.0', rdn)) +print(server.getsockname()) +# 監聽埠 +server.listen(20) # 監聽 +while True: + conn, address = server.accept() + print("進入等待時間....") + + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break +i = 0 +while bool(res_boolen):# == 1: + print("start") + #label.begin + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(0.5) + """ + try: + """ + data_server = conn.recv(1024) + res_msg = data_server.decode() + print(res_msg) + if res_msg == "You lose": + print("You lose") + i = 1 + break + elif res_msg == " ": + pass#continue + """ + except: + continue + """ + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太小了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + else: + print("不正確,太大了") + #goto.begin + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + """ + msg = '1' + conn.send(msg.encode('utf-8')) + """ + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + msg = '1' + conn.send(msg.encode('utf-8')) + time.sleep(1.5) + conn.send(" ".encode('utf-8')) + +if i == 0: + msg = 'You lose' + conn.send(msg.encode('utf-8')) + print("You win") +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() + diff --git a/V2/game_socket-server.py b/V2/game_socket-server.py new file mode 100644 index 0000000..7afe621 --- /dev/null +++ b/V2/game_socket-server.py @@ -0,0 +1,150 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "answerdatalog.csv" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print(rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect(('192.168.1.101', int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(3) +while True: + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + ans = int(data.decode()) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + break +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + guest = int(input(ranges)) + + client.send(str(ans).encode('utf-8')) + + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + break + + print("不正確,太小了") + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + break + + print("不正確,太大了") + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + if count+1 == last: + print("加油,繼續保持") + elif count+1 < last: + print("有進步") + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + break + + else: + print("請輸入正確的數字") + #goto.begin + else: + print("請輸入正確的數字") + #goto.begin + count = count + 1 + +if count <= 3: + print("太神了吧! 有夠厲害!") +elif count <= 5: + print("也算不錯耶") +elif count <= 10: + print("老大:幫幫忙,振作點") +else: + print("不會吧 腦袋裝醬糊嗎?") +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() \ No newline at end of file diff --git a/V2/game_socket-server_1P.py b/V2/game_socket-server_1P.py new file mode 100644 index 0000000..07aceef --- /dev/null +++ b/V2/game_socket-server_1P.py @@ -0,0 +1,247 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +#from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "server-answerdatalog.csv" +files = "highest.txt" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() + +if not os.path.exists(files): + last = float("inf") +else: + f = open(files) + last = int(f.read()) + f.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print("port=",rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + guest = random.randint(low, high) + guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太小了") + game_msg = "不正確,太小了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太大了") + game_msg = "不正確,太大了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + game_msg = "正確"+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + game_msg = "再加油,快破紀錄了" + client.send(str(game_msg).encode('utf-8')) + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + game_msg = "目前最高分(猜最少次):" + str(second) + client.send(str(game_msg).encode('utf-8')) + break + + else: + print("請輸入正確的數字") + continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/V2/game_socket-server_2P.py b/V2/game_socket-server_2P.py new file mode 100644 index 0000000..ee24d04 --- /dev/null +++ b/V2/game_socket-server_2P.py @@ -0,0 +1,261 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +#from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = input("請輸入一個數字") +while int(ans) <= 0 or int(ans) >= 100: + ans = input("請輸入一個正確的數字") +ans = abs(int(ans)) + +#ans = random.randint(low, high) +file = "server-answerdatalog.csv" +files = "highest.txt" +count = 0 +second = 0 + +with open(file, 'w') as ansf: + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +""" +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +""" +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print("port(",rdn,")") +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + print(res) + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +#guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + #print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + #if bool(res_guest) and count > 0: + #guest = int(input(ranges)) + #guest = random.randint(low, high) + #guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + guest = int(input(ranges)) + game_msg = "" + game_msg = "對方:"+str(guest)+"\n" + print("你:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太小了") + game_msg = "不正確,太小了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太大了") + game_msg = "不正確,太大了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + game_msg = "正確"+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + with open(files, 'w') as f: + f.write(str(count+1)) + f.close() + """ + f = open(files, "w") + f.write(str(count+1)) + f.close() + """ + else: + print("再加油,快破紀錄了") + game_msg = "再加油,快破紀錄了" + client.send(str(game_msg).encode('utf-8')) + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + game_msg = "目前最高分(猜最少次):" + str(second) + client.send(str(game_msg).encode('utf-8')) + break + + else: + print("請輸入正確的數字") + continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +with open(files, 'a') as ansf: + ansf.write(str(count+1) + ",\n") +ansf.close() +""" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() +""" \ No newline at end of file diff --git a/V2/game_socket-server_3P-V3.py b/V2/game_socket-server_3P-V3.py new file mode 100644 index 0000000..6a7ef2e --- /dev/null +++ b/V2/game_socket-server_3P-V3.py @@ -0,0 +1,269 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import asyncio +#from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "server-answerdatalog.csv" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print(rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + res = data_server.decode() + print(res,1) + res_other = res + while res_other != res: + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_other = data_server.decode() + print("收到連線1....") + print(res_other) + #res = "" + while res == res_other: + res = data_server.decode() + print(res,2) + + res_other_two = res + while res_other_two != res: + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_other_two = data_server.decode() + print("收到連線2....") + print(res_other_two) + server.send(res_other.encode('utf-8')) + #conn.close() + + #time.sleep(1) + + break + break +#game begin +# +print("正在等待連線....") +msg = res_other#input('>>:')#.strip() + +server.send(msg.encode('utf-8')) + +time.sleep(1.5) +msg = str(ans)#input('>>:')#.strip() + +server.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + server.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = conn.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + server.send(msg.encode('utf-8')) + + data = conn.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + server.send(" ".encode('utf-8')) + data = conn.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + print(ranges) + data = conn.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + guest = random.randint(low, high) + guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + server.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + server.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太小了") + game_msg = "不正確,太小了" + server.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + server.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太大了") + game_msg = "不正確,太大了" + server.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + game_msg = "正確"+str(count+1) + "次" + server.send(str(game_msg).encode('utf-8')) + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + server.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + server.send(str(game_msg).encode('utf-8')) + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + game_msg = "再加油,快破紀錄了" + server.send(str(game_msg).encode('utf-8')) + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + game_msg = "目前最高分(猜最少次):" + str(second) + server.send(str(game_msg).encode('utf-8')) + break + + else: + print("請輸入正確的數字") + continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + servert.send(" ".encode('utf-8')) + data = conn.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + server.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/V2/game_socket-server_3P-V4.py b/V2/game_socket-server_3P-V4.py new file mode 100644 index 0000000..9426b2f --- /dev/null +++ b/V2/game_socket-server_3P-V4.py @@ -0,0 +1,300 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import asyncio +import threading +#from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "server-answerdatalog.csv" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print(rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +print("Your computer name is ",hostname,",Your ip address is ",ip) +#print(server.bind(('localhost',8888))) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + # 接收資料 + data_server = conn.recv(1024) + def catch_cient(ds=data_server): + # 接收資料 + ds = conn.recv(1024) + if not ds: + print('client is lost...') + + res_other = ds.decode() + print("收到連線....") + print(res_other) + return res_other + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + else: + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print("res_ip",res_ip) + + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + else: + res_ip2 = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print("res_ip2",res_ip2) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + time.sleep(1) + res2 = data_server.decode() + print(res,1) + print(res2,2) + #res_other = res + #while res_other == res_other_two: + res_other = threading.Thread(target=catch_cient)#, args=data_server) + res_other_two = threading.Thread(target=catch_cient)#, args=data_server) + res_other.strat() + res_other_two.strat() + res_other.join() + print(res_other) + time.sleep(1) + res_other_two.join() + print(res_other_two) + #res = "" + ''' + while res == res_other: + res = data_server.decode() + print(res,2) + ''' + #res_other_two = res + ''' + while res_other_two != res: + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_other_two = data_server.decode() + print("收到連線2....") + print(res_other_two) + ''' + server.send(res_other.encode('utf-8')) + #conn.close() + + time.sleep(1) + server.send(res_other_two.encode('utf-8')) + break + break +#game begin +# +print("正在等待連線....") +msg = res_other#input('>>:')#.strip() + +server.send(msg.encode('utf-8')) + +time.sleep(1.5) +msg = str(ans)#input('>>:')#.strip() + +server.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + server.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = conn.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + server.send(msg.encode('utf-8')) + + data = conn.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + server.send(" ".encode('utf-8')) + data = conn.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + print(ranges) + data = conn.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + guest = random.randint(low, high) + guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + server.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + server.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太小了") + game_msg = "不正確,太小了" + server.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + server.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太大了") + game_msg = "不正確,太大了" + server.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + game_msg = "正確"+str(count+1) + "次" + server.send(str(game_msg).encode('utf-8')) + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + server.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + server.send(str(game_msg).encode('utf-8')) + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + game_msg = "再加油,快破紀錄了" + server.send(str(game_msg).encode('utf-8')) + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + game_msg = "目前最高分(猜最少次):" + str(second) + server.send(str(game_msg).encode('utf-8')) + break + + else: + print("請輸入正確的數字") + continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + servert.send(" ".encode('utf-8')) + data = conn.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + server.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/V2/game_socket-server_3P.py b/V2/game_socket-server_3P.py new file mode 100644 index 0000000..980af8d --- /dev/null +++ b/V2/game_socket-server_3P.py @@ -0,0 +1,267 @@ +#https://www.itread01.com/article/1510122002.html +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import asyncio +#from goto import with_goto,_make_code +#@with_goto + +low, high = 1, 100 +ans = random.randint(low, high) +file = "server-answerdatalog.csv" +count = 0 +second = 0 + + +ansf = open(file, "w") +ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") +ansf.write(str(ans) + "\t\t\t\t") +ansf.close() +# 宣告協議型別 +server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +# 繫結本地網絡卡(多網絡卡選擇),埠 +rdn = str(random.randint(0,9)) +for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) +print(rdn) +server.bind(('0.0.0.0', int(rdn))) +print(server.getsockname()) +#print(server.bind(('localhost',8888))) +# 監聽埠 +server.listen(20) # 監聽 +#clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +while True: + + conn, address = server.accept() + print("進入等待時間....") + while True: + + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + res = data_server.decode() + print(res,1) + res_other = res + while res_other != res: + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_other = data_server.decode() + print("收到連線1....") + print(res_other) + #res = "" + while res != res_other: + res = data_server.decode() + print(res,2) + res_other_two = res + while res_other_two != res: + data_server = conn.recv(1024) + if not data_server: + print('client is lost...') + break + res_other_two = data_server.decode() + print("收到連線2....") + print(res_other_two) + conn.close() + + #time.sleep(1) + break + break +#game begin +client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) +client.connect((res_ip, int(res))) # 服務端ip和埠 +print("正在等待連線....") +msg = res_other#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) + +time.sleep(1.5) +msg = str(ans)#input('>>:')#.strip() + +client.send(msg.encode('utf-8')) +time.sleep(1.5) + +while True: + + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break +i = 0 +guest = random.randint(low, high) + +while bool(res_boolen):# == True: + print("start") + #label.begin + ranges = str(low) + "~" + str(high) + ":" + print(ranges) + data = client.recv(1024) # 1024位元組的資料 + #print(low,high) + res_guest = data.decode() + if bool(res_guest) and count > 0: + guest = random.randint(low, high) + guest = random.randint(low, high) + #elif count == 0: + #guest = random.randint(low, high) + #guest = int(input(ranges)) + game_msg = "" + game_msg = "電腦:"+str(guest)+"\n" + print("電腦:"+str(guest)) + #if count == 0: + #client.send(str(ans).encode('utf-8')) + client.send(str(game_msg).encode('utf-8')) + + time.sleep(1) + #try: + + #except: + #pass + + #print(ans) + if guest <= high: + if guest >= low: + + if guest < ans: + low = guest + if (high - 1) - (low - 1) == 2: + print("錯誤,公布答案",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太小了") + game_msg = "不正確,太小了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + elif guest > ans: + high = guest + if high - low == 2: + print("錯誤,公布答案:",str(ans)) + print(str(count+1) + "次") + game_msg = "錯誤,公布答案"+str(ans)+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + break + + print("不正確,太大了") + game_msg = "不正確,太大了" + client.send(str(game_msg).encode('utf-8')) + #ranges = str(low) + "~" + str(high) + ":" + #conn.send(ranges.encode('utf-8')) + #conn.close() + #goto.begin + else: + print("正確") + print(str(count+1) + "次") + + game_msg = "正確"+str(count+1) + "次" + client.send(str(game_msg).encode('utf-8')) + + if count+1 == last: + print("加油,繼續保持") + game_msg = "加油,繼續保持" + client.send(str(game_msg).encode('utf-8')) + elif count+1 < last: + print("有進步") + game_msg = "有進步" + client.send(str(game_msg).encode('utf-8')) + f = open(files, "w") + f.write(str(count+1)) + f.close() + else: + print("再加油,快破紀錄了") + game_msg = "再加油,快破紀錄了" + client.send(str(game_msg).encode('utf-8')) + second = (second + count) + 1 + + print("目前最高分(猜最少次):" + str(second)) + game_msg = "目前最高分(猜最少次):" + str(second) + client.send(str(game_msg).encode('utf-8')) + break + + else: + print("請輸入正確的數字") + continue + #goto.begin + else: + print("請輸入正確的數字") + continue + #goto.begin + count = count + 1 + client.send(" ".encode('utf-8')) + data = client.recv(1024) + res_msg = data.decode() + if res_msg == "You lose": + i = 1 + print("You lose") + continue + +if i == 0: + game_msg = "You lose" + client.send(str(game_msg).encode('utf-8')) +time.sleep(3) + +if count <= 3: + print("太神了吧! 有夠厲害!") + game_msg = "太神了吧! 有夠厲害!" +elif count <= 5: + print("也算不錯耶") + game_msg = "也算不錯耶" +elif count <= 10: + print("老大:幫幫忙,振作點") + game_msg = "老大:幫幫忙,振作點" +else: + print("不會吧 腦袋裝醬糊嗎?") + game_msg = "不會吧 腦袋裝醬糊嗎?" +ansf = open(file, "a") +ansf.write(str(count+1) + ",\n") +ansf.close() diff --git a/V2/game_test.py b/V2/game_test.py new file mode 100644 index 0000000..03179f7 --- /dev/null +++ b/V2/game_test.py @@ -0,0 +1,39 @@ +import turtle as t + +t.screensize(600,400)# 設定視窗大小 +t.showturtle()#t.hideturtle() +t.shape("turtle") +t.speed('slow') +t.bgcolor('Dodger blue') +def draw(x,y,xpos,ypos,pensize=5,pencolorStr="black",penangle=90): + t.penup() + t.pensize(pensize) + t.setheading(penangle) + t.color(pencolorStr) + t.pendown() + t.goto(x, y) + t.goto(xpos, ypos) + t.penup() +def movePen(x,y): + t.penup() + t.goto(x, y) +x = 200 +y = 350 +for i in range(-450,450,100): + + movePen(0+i,y) + draw(0+i,50+y,0+i,0+y) + + movePen(0+i,0+y) + draw(0+i,0+y,100+i,0+y) +movePen(0+i+x,0+y) +draw(0+i,50+y,100+i,0+y) +for i in range(-450,450,100): + + movePen(50+i,50+y) + draw(0+i,50+y,0+i,50+y) + + movePen(0+i,50+y) + draw(0+i,50+y,100+i,50+y) +t.exitonclick() #點擊滑鼠關閉視窗 +t.mainloop() \ No newline at end of file diff --git a/V2/highest.txt b/V2/highest.txt new file mode 100644 index 0000000..b0d5ac4 --- /dev/null +++ b/V2/highest.txt @@ -0,0 +1,2 @@ +88, +7, diff --git a/V2/ip-list b/V2/ip-list new file mode 100644 index 0000000..325ac2b --- /dev/null +++ b/V2/ip-list @@ -0,0 +1 @@ +25.40.69.65 \ No newline at end of file diff --git a/V2/server-answerdatalog.csv b/V2/server-answerdatalog.csv new file mode 100644 index 0000000..71da061 --- /dev/null +++ b/V2/server-answerdatalog.csv @@ -0,0 +1,2 @@ +T: ^:, +63 \ No newline at end of file diff --git a/pythonController-autoUpdate/__main__V0_11.py b/pythonController-autoUpdate/__main__V0_11.py index 768e73f..2b410d8 100644 --- a/pythonController-autoUpdate/__main__V0_11.py +++ b/pythonController-autoUpdate/__main__V0_11.py @@ -24,7 +24,7 @@ def _cheakUpdate(): from cheakUpdateV0_4 import __init__ global E_count - fileName = "webDownloader-beta2.11.7" + fileName = "webDownloader-beta2.11.8" file_name = "webDoenloader-" #file_name.split(".").pop() diff --git a/pythonController-autoUpdate/__main__V0_12.py b/pythonController-autoUpdate/__main__V0_12.py new file mode 100644 index 0000000..53e1ec7 --- /dev/null +++ b/pythonController-autoUpdate/__main__V0_12.py @@ -0,0 +1,177 @@ +# -*- coding: UTF-8 -*- +from tkinter import * +from tkinter import messagebox +import tkinter as tk + +import os +import threading + +import runV5 as run +from runV5 import main,setting + +root = Tk() +root.title("Mune")#ch16_8 +root.geometry("300x180") +root.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +try: + basePath = "./" +except: + basePath = os.getcwd().replace("\\", "/")+"/" + +E_count = 0 + +def _cheakUpdate(): + + from cheakUpdateV0_4 import __init__ + global E_count + fileName = "webDownloader-beta2.11.10" + file_name = "webDoenloader-" + #file_name.split(".").pop() + + #i = 0 + with open(os.path.join(basePath,"config"),"r") as config: + config = config.read() + print("config:",config) + for c in config.split(",\n"): + #print(file_name,c) + #i += 1 + if file_name in c: + #i -= 1 + fileName = c + + break + #print("i:",i) + + #if not i == 1: + #return + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + try: + exec(open(fileName+".py","rb").read()) + return False + except: + """ + try: + + t[1] = threading.Thread(target = r'from fileName import *') + + rlock1 = t[1].RLock() + semaphore1 = t[1].Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t[1].start() + t[1].join() + rlock1.release() + semaphore1.release() + except: + return + finally: + pass + """ + E_count += 1 + print("Can not find the Downloader!") + tkinter.messagebox.showinfo("ERROR", "更新錯誤") + return True + elif not os.path.isfile(os.path.join(basePath,fileName+".py")): + try: + os.system(fileName+".exe") + return False + except: + E_count += 1 + print("Can not find the Downloader!") + tkinter.messagebox.showinfo("ERROR", "更新錯誤") + return True + else: + print("Can not find the Downloader!") + tkinter.messagebox.showinfo("ERROR", "更新錯誤") + cheakUpdate() + if E_count >= 5: + print("Can not find the Downloader!") + tkinter.messagebox.showinfo("ERROR", "更新錯誤") + return False + +#檢查更新 +#while cheakUpdate(): +#_cheakUpdate() + +""" +fr = "" +with open("webDownloader-beta2.6.py","rb") as fr: + fr = fr.read() + #print(fr) +""" +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + #t.append(threading.Thread(target = _cheakUpdate())) + + for th in range(len(t)): + try: + t[th].start() + except: + t[th].join() + for th in range(len(t)): + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + """ + if th <= len(t): + th += 1 + """ + +def _exit(): + root.destroy() + run._exit() + exit() + +def game(): + #super(main) + #os.system("runV4.exe") + #from runV5 import main + main() + #windowM = tk.Toplevel(run.main) + #windowM.mainloop() + +def gameSetting(): + #super(setting) + #os.system("runV4.exe") + #from runV5 import setting + setting() + #windowS = tk.Toplevel(run.window) + #windowS.mainloop() + +def __main__(): + menubar = Menu(root) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game",menu=gamemenu) + gamemenu.add_command(label="(selet) game_socket-2P-GUIv2.2",command=game) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main) + + settingmenu = Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=settingmenu) + settingmenu.add_command(label="Setting",command=gameSetting,underline=0) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + root.config(menu=menubar) # 顯示功能表物件 + root.mainloop() + +if __name__ == '__main__': + __init__() diff --git a/pythonController-autoUpdate/cheakfileV1_5_5.py b/pythonController-autoUpdate/cheakfileV1_5_5.py new file mode 100644 index 0000000..c62879b --- /dev/null +++ b/pythonController-autoUpdate/cheakfileV1_5_5.py @@ -0,0 +1,806 @@ +class cheakFile: + from_file_path = None + correspond_file_path = None + cheak = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + thr = threading.Thread(target = self._setup, + args = [ + str(FFL), + str(CFL) + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #del r + #print("r=",r) + #cf = False + #if not r == None: + cf = self.cheak#self.cheakFile() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + thr.join() + Rl.release() + Sem.release() + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + try: + print(self.from_dir_list[tc]) + except: + pass + try: + print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + if not self.dir_list == []: + state = True + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir, + args = [ + from_dirList, + dirList, + len(self.from_dir_list), + len(self.dir_list) + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + + self.dir_list.remove(dirList) + + i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def _setup(self,from_file_path : str,correspond_file_path : str) -> None: + import os + #import time + + if not os.path.isdir(from_file_path) and not os.path.isdir(correspond_file_path): + + if not from_file_path == "" and not correspond_file_path == "": + + file_size = os.path.getsize(from_file_path) + + file_size1 = os.path.getsize(correspond_file_path) + + + if not file_size == file_size1: + return False + elif file_size + file_size1 == 0: + return None + #print('File Size(1):', file_size, 'bytes.') + #print('File Size(2):', file_size1, 'bytes.') + + #time.sleep(0.0001) + + with open(from_file_path,"rb") as Ff: + #self.from_f = Ff.read() + + + + file_start_size = (file_size//100)*100 + #file_end_size = file_size-file_start_size + + with open(correspond_file_path,"rb") as Cf: + #self.correspond_f = Cf.read() + + + + file_start_size1 = (file_size1//100)*100 + #file_end_size1 = file_size1-file_start_size1 + + i, i1 = 0, 0 + + for i in range(0,file_start_size,100): + self.from_f = Ff.read()[i+0:i+100] + for i1 in range(0,file_start_size1,100): + + self.correspond_f = Cf.read()[i1+0:i1+100] + #print(self.from_f,self.correspond_f,sep="\t") + state = self.cheakFile() + if not state: + #del Ff, Cf + return False + if not i == i1: + continue + #del Ff.read()[i1+0:i1+100], Cf.read()[i1+0:i1+100] + #ii, ii1 = i, i1 + #for i in range(ii,file_size,file_end_size): + self.from_f = Ff.read()[i+0:file_size] + # for i1 in range(ii1,file_end_size1): + self.correspond_f = Cf.read()[i1+0:file_size1] + + if not self.cheakFile(): + #del Ff, Cf + return False + + else: + return None + + else: + return None + #del Ff, Cf + return True + + def __init__(self,from_file_path : str,correspond_file_path : str,mode = "file"): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + self.from_file_path,self.correspond_file_path = from_file_path,correspond_file_path + self.mode = mode + + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return# r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return# report + + def main(self): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return r, report + + def cheakFile(self): + if self.from_f == self.correspond_f: + self.from_f = "" + self.correspond_f = "" + self.cheak = True + return True + else: + self.from_f = "" + self.correspond_f = "" + self.cheak = False + return False + + def repeat(self,count,from_file_path,correspond_file_path): + if not i == 0 or not int: + pass + else: + if from_file_path is list and correspond_file_path is list: + for i in range(count): + for Cf in from_file_path: + for Ff in correspond_file_path: + setup(self,from_file_path,correspond_file_path) + cheakFile(self) + +class cleanFile: + import os + import threading + import time + + def __init__(self,file_source = "temp/update-data-main/"): + with open("info", "r") as inf: + inf = inf.read() + file_source = file_source+inf+"/" + return os.remove(file_source) + +class replaceFile: + """ + from tkinter import * + from tkinter.ttk import * + """ + import tkinter.messagebox + + count = 1 + arg = """\ + game_socket-client_2P-GUIv2.py, + game_socket-server_2P-GUIv2.py, + view.py + + """ + + def __init__(self,file_source = "temp/update-data-main/",file_destination = "./",show_windows = True): + """ + show_windows => True & False . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.show_windows = show_windows + + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + + def replace_file(self,args = arg): + pram = args + + + + i = 1 + for arg in pram.split(","): + if not cheakFile(arg,self.file_source+arg): + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + #更新目前檔案 + + + get_files = os.listdir(self.file_source) + + for g in get_files: + os.replace(self.file_source + g, self.file_destination + g) + print(g) + """ + count += 1 + return count + """ + else: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + + i += 1 + +class packageFile(cheakFile): + import os + import threading + import time + + version = "0.0.0" + file_source = "" + file_destination = "" + from_file_path = None + correspond_file_path = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + """ + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + ''' + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + r = self.setup(str(FFL),str(CFL)) + #print("r=",r) + cf = False + #if not r == None: + cf = self.package() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + ''' + try: + with open("version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #Ff.split(".").pop() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + try: + with open(from_file_path+"version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + with open("version","w") as v: + v = v.write(self.version) + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + report.append(FFL) + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + + try: + print(self.from_dir_list[tc]) + except: + pass + try: + pass#print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + state = True + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + """ + if not self.dir_list == []: + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + """ + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir,args = [ + from_dirList, + dirList, + len(self.from_dir_list)-1, + len(self.dir_list)-1 + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + """ + self.dir_list.remove(dirList) + """ + #i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def __init__(self,file_source = "temp/update-data-main/",file_destination = "./",version = "0.0.0",mode = "file"): + """ + mode => "file" & "path" . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.version = version + if mode == "file": + self.show_windows = True + elif mode == "path": + self.show_windows = False + + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + + def package(self,fileName,icon = "unicorn",version = "0.0.0"): + import os + import time + + file_name = fileName.split("/").pop() + + + i = 0 + with open(self.file_source+"config","r") as config: + config = config.read() + #print("config:",config) + for c in config.split(",\n"): + #print(file_name,type(file_name),c,type(c)) + print("[",file_name,"<=>",c,"]") + i += 1 + if file_name in c and c in file_name: + continue + i -= 1 + print("i:",i) + + if not i == 1: + return + + print(fileName,"has been packaged.") + + s = -1 + + try: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,os.path.abspath(fileName).replace("\\","/")) + + print(args) + + s = os.system("pyinstaller.exe " + args) + except: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,fileName) + + print(args) + + s = os.system("pyinstaller.exe " + args) + print(s) + if not s: + start, end = int(time.time()), int(time.time()) + #time.sleep(30) + while not end-start >= 30: + end = time.time() + print(start,end) + file_name.split(".").pop() + os.remove(file_name+".spec") + #cleanFile(file_name+".spec") + replaceFile("dist/",self.file_destination,self.show_windows).replace_file(file_name+".exe") + def main(self): + self.find_dir(self.file_source,self.file_destination) diff --git a/pythonController-autoUpdate/cheakfileV1_5_6.py b/pythonController-autoUpdate/cheakfileV1_5_6.py new file mode 100644 index 0000000..30532bc --- /dev/null +++ b/pythonController-autoUpdate/cheakfileV1_5_6.py @@ -0,0 +1,814 @@ +class cheakFile: + from_file_path = None + correspond_file_path = None + cheak = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + thr = threading.Thread(target = self._setup, + args = [ + str(FFL), + str(CFL) + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #del r + #print("r=",r) + #cf = False + #if not r == None: + cf = self.cheak#self.cheakFile() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + thr.join() + Rl.release() + Sem.release() + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + try: + print(self.from_dir_list[tc]) + except: + pass + try: + print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + if not self.dir_list == []: + state = True + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir, + args = [ + from_dirList, + dirList, + len(self.from_dir_list), + len(self.dir_list) + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + + self.dir_list.remove(dirList) + + i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def _setup(self,from_file_path : str,correspond_file_path : str) -> None: + import os + #import time + + if not os.path.isdir(from_file_path) and not os.path.isdir(correspond_file_path): + + if not from_file_path == "" and not correspond_file_path == "": + + file_size = os.path.getsize(from_file_path) + + file_size1 = os.path.getsize(correspond_file_path) + + + if not file_size == file_size1: + return False + elif file_size + file_size1 == 0: + return None + #print('File Size(1):', file_size, 'bytes.') + #print('File Size(2):', file_size1, 'bytes.') + + #time.sleep(0.0001) + + with open(from_file_path,"rb") as Ff: + #self.from_f = Ff.read() + + + + file_start_size = (file_size//100)*100 + #file_end_size = file_size-file_start_size + + with open(correspond_file_path,"rb") as Cf: + #self.correspond_f = Cf.read() + + + + file_start_size1 = (file_size1//100)*100 + #file_end_size1 = file_size1-file_start_size1 + + i, i1 = 0, 0 + + for i in range(0,file_start_size,100): + self.from_f = Ff.read()[i+0:i+100] + for i1 in range(0,file_start_size1,100): + + self.correspond_f = Cf.read()[i1+0:i1+100] + #print(self.from_f,self.correspond_f,sep="\t") + state = self.cheakFile() + if not state: + #del Ff, Cf + return False + if not i == i1: + continue + #del Ff.read()[i1+0:i1+100], Cf.read()[i1+0:i1+100] + #ii, ii1 = i, i1 + #for i in range(ii,file_size,file_end_size): + self.from_f = Ff.read()[i+0:file_size] + # for i1 in range(ii1,file_end_size1): + self.correspond_f = Cf.read()[i1+0:file_size1] + + if not self.cheakFile(): + #del Ff, Cf + return False + + else: + return None + + else: + return None + #del Ff, Cf + return True + + def __init__(self,from_file_path : str,correspond_file_path : str,mode = "file"): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + self.from_file_path,self.correspond_file_path = from_file_path,correspond_file_path + self.mode = mode + + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return# r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return# report + + def main(self): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return r, report + + def cheakFile(self): + if self.from_f == self.correspond_f: + self.from_f = "" + self.correspond_f = "" + self.cheak = True + return True + else: + self.from_f = "" + self.correspond_f = "" + self.cheak = False + return False + + def repeat(self,count,from_file_path,correspond_file_path): + if not i == 0 or not int: + pass + else: + if from_file_path is list and correspond_file_path is list: + for i in range(count): + for Cf in from_file_path: + for Ff in correspond_file_path: + setup(self,from_file_path,correspond_file_path) + cheakFile(self) + +class cleanFile: + import os + import threading + import time + + def __init__(self,file_source = "temp/update-data-main/"): + with open("info", "r") as inf: + inf = inf.read() + file_source = file_source+inf+"/" + return os.remove(file_source) + +class replaceFile: + """ + from tkinter import * + from tkinter.ttk import * + """ + import tkinter.messagebox + import os + + count = 1 + arg = """\ + game_socket-client_2P-GUIv2.py, + game_socket-server_2P-GUIv2.py, + view.py + + """ + + def __init__(self,file_source = "temp/update-data-main/",file_destination = "./",show_windows = True): + """ + show_windows => True & False . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.show_windows = show_windows + if not file_source == "temp/update-data-main/": + return + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + + def replace_file(self,args = arg): + pram = args + + import os + import tkinter.messagebox + + i = 1 + for arg in pram.split(","): + cheak = False + if self.file_source == "temp/update-data-main/": + cheak = cheakFile(arg,self.file_source+arg) + if not cheak: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + #更新目前檔案 + + get_files = os.listdir(self.file_source) + + for g in get_files: + os.replace(self.file_source + g, self.file_destination + g) + print(g) + """ + count += 1 + return count + """ + else: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + + i += 1 + +class packageFile: + import os + import threading + import time + + version = "0.0.0" + file_source = "" + file_destination = "" + from_file_path = None + correspond_file_path = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + """ + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + ''' + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + r = self.setup(str(FFL),str(CFL)) + #print("r=",r) + cf = False + #if not r == None: + cf = self.package() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + ''' + try: + with open("version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #Ff.split(".").pop() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + try: + with open(from_file_path+"version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + with open("version","w") as v: + v = v.write(self.version) + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + report.append(FFL) + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + + try: + print(self.from_dir_list[tc]) + except: + pass + try: + pass#print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + state = True + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + """ + if not self.dir_list == []: + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + """ + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir,args = [ + from_dirList, + dirList, + len(self.from_dir_list)-1, + len(self.dir_list)-1 + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + """ + self.dir_list.remove(dirList) + """ + #i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def __init__(self,file_source = "temp/update-data-main/",file_destination = "./",version = "0.0.0",mode = "file"): + """ + mode => "file" & "path" . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.version = version + if mode == "file": + self.show_windows = True + elif mode == "path": + self.show_windows = False + + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + + def package(self,fileName,icon = "unicorn.ico",version = "0.0.0"): + import os + import time + + file_name = fileName.split("/").pop() + + + i = 0 + with open(self.file_source+"config","r") as config: + config = config.read() + #print("config:",config) + for c in config.split(",\n"): + #print(file_name,type(file_name),c,type(c)) + print("[",file_name,"<=>",c,"]") + i += 1 + if file_name in c and c in file_name: + continue + i -= 1 + print("i:",i) + + if not i == 1: + return + + print(fileName,"has been packaged.") + + s = -1 + + try: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,os.path.abspath(fileName).replace("\\","/")) + + print(args) + + s = os.system("pyinstaller.exe " + args) + except: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,fileName) + + print(args) + + s = os.system("pyinstaller.exe " + args) + print(s) + if not s: + start, end = int(time.time()), int(time.time()) + #time.sleep(30) + while not end-start >= 30: + end = time.time() + print(start,end) + file_name = file_name.split(".",-1) + file_name.pop() + file_name = ".".join(file_name) + print(file_name) + os.remove(file_name+".spec") + #cleanFile(file_name+".spec") + replaceFile("dist/",self.file_destination,self.show_windows).replace_file(file_name+".exe") + def main(self): + self.find_dir(self.file_source,self.file_destination) diff --git a/pythonController-autoUpdate/cheakfileV1_5_7.py b/pythonController-autoUpdate/cheakfileV1_5_7.py new file mode 100644 index 0000000..75726c2 --- /dev/null +++ b/pythonController-autoUpdate/cheakfileV1_5_7.py @@ -0,0 +1,816 @@ +class cheakFile: + from_file_path = None + correspond_file_path = None + cheak = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + thr = threading.Thread(target = self._setup, + args = [ + str(FFL), + str(CFL) + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #del r + #print("r=",r) + #cf = False + #if not r == None: + cf = self.cheak#self.cheakFile() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + thr.join() + Rl.release() + Sem.release() + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + try: + print(self.from_dir_list[tc]) + except: + pass + try: + print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + if not self.dir_list == []: + state = True + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir, + args = [ + from_dirList, + dirList, + len(self.from_dir_list), + len(self.dir_list) + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + + self.dir_list.remove(dirList) + + i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def _setup(self,from_file_path : str,correspond_file_path : str) -> None: + import os + #import time + + if not os.path.isdir(from_file_path) and not os.path.isdir(correspond_file_path): + + if not from_file_path == "" and not correspond_file_path == "": + + file_size = os.path.getsize(from_file_path) + + file_size1 = os.path.getsize(correspond_file_path) + + + if not file_size == file_size1: + return False + elif file_size + file_size1 == 0: + return None + #print('File Size(1):', file_size, 'bytes.') + #print('File Size(2):', file_size1, 'bytes.') + + #time.sleep(0.0001) + + with open(from_file_path,"rb") as Ff: + #self.from_f = Ff.read() + + + + file_start_size = (file_size//100)*100 + #file_end_size = file_size-file_start_size + + with open(correspond_file_path,"rb") as Cf: + #self.correspond_f = Cf.read() + + + + file_start_size1 = (file_size1//100)*100 + #file_end_size1 = file_size1-file_start_size1 + + i, i1 = 0, 0 + + for i in range(0,file_start_size,100): + self.from_f = Ff.read()[i+0:i+100] + for i1 in range(0,file_start_size1,100): + + self.correspond_f = Cf.read()[i1+0:i1+100] + #print(self.from_f,self.correspond_f,sep="\t") + state = self.cheakFile() + if not state: + #del Ff, Cf + return False + if not i == i1: + continue + #del Ff.read()[i1+0:i1+100], Cf.read()[i1+0:i1+100] + #ii, ii1 = i, i1 + #for i in range(ii,file_size,file_end_size): + self.from_f = Ff.read()[i+0:file_size] + # for i1 in range(ii1,file_end_size1): + self.correspond_f = Cf.read()[i1+0:file_size1] + + if not self.cheakFile(): + #del Ff, Cf + return False + + else: + return None + + else: + return None + #del Ff, Cf + return True + + def __init__(self,from_file_path : str,correspond_file_path : str,mode = "file"): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + self.from_file_path,self.correspond_file_path = from_file_path,correspond_file_path + self.mode = mode + + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return# r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return# report + + def main(self): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return r, report + + def cheakFile(self): + if self.from_f == self.correspond_f: + self.from_f = "" + self.correspond_f = "" + self.cheak = True + return True + else: + self.from_f = "" + self.correspond_f = "" + self.cheak = False + return False + + def repeat(self,count,from_file_path,correspond_file_path): + if not i == 0 or not int: + pass + else: + if from_file_path is list and correspond_file_path is list: + for i in range(count): + for Cf in from_file_path: + for Ff in correspond_file_path: + setup(self,from_file_path,correspond_file_path) + cheakFile(self) + +class cleanFile: + import os + import threading + import time + + def __init__(self,file_source = "temp/update-data-main/"): + import os + if file_source == "temp/update-data-main/": + with open("info", "r") as inf: + inf = inf.read() + file_source = file_source+inf+"/" + return os.remove(file_source) + +class replaceFile: + """ + from tkinter import * + from tkinter.ttk import * + """ + import tkinter.messagebox + import os + + count = 1 + arg = """\ + game_socket-client_2P-GUIv2.py, + game_socket-server_2P-GUIv2.py, + view.py + + """ + + def __init__(self,file_source:str = "temp/update-data-main/",file_destination:str = "./",show_windows:bool = True,args:str = arg): + """ + show_windows => True & False . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.show_windows = show_windows + if file_source == "temp/update-data-main/": + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + self.replace_file(args) + + def replace_file(self,args = arg): + pram = args + + import os + import tkinter.messagebox + + i = 1 + for arg in pram.split(","): + cheak = False + if self.file_source == "temp/update-data-main/": + cheak = cheakFile(arg,self.file_source+arg) + if not cheak: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + #更新目前檔案 + + get_files = os.listdir(self.file_source) + + for g in get_files: + os.replace(self.file_source + g, self.file_destination + g) + print(g) + """ + count += 1 + return count + """ + else: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + + i += 1 + +class packageFile: + import os + import threading + import time + + version = "0.0.0" + file_source = "" + file_destination = "" + from_file_path = None + correspond_file_path = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + """ + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + ''' + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + r = self.setup(str(FFL),str(CFL)) + #print("r=",r) + cf = False + #if not r == None: + cf = self.package() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + ''' + try: + with open("version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #Ff.split(".").pop() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + try: + with open(from_file_path+"version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + with open("version","w") as v: + v = v.write(self.version) + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + report.append(FFL) + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + + try: + print(self.from_dir_list[tc]) + except: + pass + try: + pass#print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + state = True + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + """ + if not self.dir_list == []: + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + """ + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir,args = [ + from_dirList, + dirList, + len(self.from_dir_list)-1, + len(self.dir_list)-1 + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + """ + self.dir_list.remove(dirList) + """ + #i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def __init__(self,file_source = "temp/update-data-main/",file_destination = "./",version = "0.0.0",mode = "file"): + """ + mode => "file" & "path" . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.version = version + if mode == "file": + self.show_windows = True + elif mode == "path": + self.show_windows = False + + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + + def package(self,fileName,icon = "unicorn.ico",version = "0.0.0"): + import os + import time + + file_name = fileName.split("/").pop() + + + i = 0 + with open(self.file_source+"config","r") as config: + config = config.read() + #print("config:",config) + for c in config.split(",\n"): + #print(file_name,type(file_name),c,type(c)) + print("[",file_name,"<=>",c,"]") + i += 1 + if file_name in c and c in file_name: + continue + i -= 1 + print("i:",i) + + if not i == 1: + return + + print(fileName,"has been packaged.") + + s = -1 + + try: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,os.path.abspath(fileName).replace("\\","/")) + + print(args) + + s = os.system("pyinstaller.exe " + args) + except: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,fileName) + + print(args) + + s = os.system("pyinstaller.exe " + args) + print(s) + if not s: + start, end = int(time.time()), int(time.time()) + #time.sleep(30) + while not end-start >= 3: + end = time.time() + print(start,end) + file_name = file_name.split(".",-1) + file_name.pop() + file_name = ".".join(file_name) + print(file_name) + #os.remove(file_name+".spec") + cleanFile(file_name+".spec") + replaceFile("dist/",self.file_destination,self.show_windows,file_name+".exe") + def main(self): + self.find_dir(self.file_source,self.file_destination) diff --git a/pythonController-autoUpdate/cheakfileV1_5_7test.py b/pythonController-autoUpdate/cheakfileV1_5_7test.py new file mode 100644 index 0000000..8ffe39d --- /dev/null +++ b/pythonController-autoUpdate/cheakfileV1_5_7test.py @@ -0,0 +1,816 @@ +class cheakFile: + from_file_path = None + correspond_file_path = None + cheak = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + thr = threading.Thread(target = self._setup, + args = [ + str(FFL), + str(CFL) + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #del r + #print("r=",r) + #cf = False + #if not r == None: + cf = self.cheak#self.cheakFile() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + thr.join() + Rl.release() + Sem.release() + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + try: + print(self.from_dir_list[tc]) + except: + pass + try: + print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + if not self.dir_list == []: + state = True + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir, + args = [ + from_dirList, + dirList, + len(self.from_dir_list), + len(self.dir_list) + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + + self.dir_list.remove(dirList) + + i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def _setup(self,from_file_path : str,correspond_file_path : str) -> bool: + import os + #import time + + if not os.path.isdir(from_file_path) and not os.path.isdir(correspond_file_path): + + if not from_file_path == "" and not correspond_file_path == "": + + file_size = os.path.getsize(from_file_path) + + file_size1 = os.path.getsize(correspond_file_path) + + + if not file_size == file_size1: + return False + elif file_size + file_size1 == 0: + return None + #print('File Size(1):', file_size, 'bytes.') + #print('File Size(2):', file_size1, 'bytes.') + + #time.sleep(0.0001) + + with open(from_file_path,"rb") as Ff: + #self.from_f = Ff.read() + + + + file_start_size = (file_size//100)*100 + #file_end_size = file_size-file_start_size + + with open(correspond_file_path,"rb") as Cf: + #self.correspond_f = Cf.read() + + + + file_start_size1 = (file_size1//100)*100 + #file_end_size1 = file_size1-file_start_size1 + + i, i1 = 0, 0 + + for i in range(0,file_start_size,100): + self.from_f = Ff.read()[i+0:i+100] + for i1 in range(0,file_start_size1,100): + + self.correspond_f = Cf.read()[i1+0:i1+100] + #print(self.from_f,self.correspond_f,sep="\t") + state = self.cheakFile() + if not state: + #del Ff, Cf + return False + if not i == i1: + continue + #del Ff.read()[i1+0:i1+100], Cf.read()[i1+0:i1+100] + #ii, ii1 = i, i1 + #for i in range(ii,file_size,file_end_size): + self.from_f = Ff.read()[i+0:file_size] + # for i1 in range(ii1,file_end_size1): + self.correspond_f = Cf.read()[i1+0:file_size1] + + if not self.cheakFile(): + #del Ff, Cf + return False + + else: + return None + + else: + return None + #del Ff, Cf + return True + + def __init__(self,from_file_path : str,correspond_file_path : str,mode : str = "file"): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + self.from_file_path,self.correspond_file_path = from_file_path,correspond_file_path + self.mode = mode + + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return object(r) + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return object(report) + + def main(self): + """ + mode => "file" & "path" . + return => "file" mode: string, "path" mode: list . + + """ + from_file_path = self.from_file_path + correspond_file_path = self.correspond_file_path + mode = self.mode + if str(mode) == "file": + r = self._setup(from_file_path,correspond_file_path) + """ + if not r == None: + r = cheakFile(self) + """ + return r + elif str(mode) == "path": + r = self.find_dir(from_file_path,correspond_file_path) + + report = "" + for rpt in r: + report += rpt +",\n" + + return r, report + + def cheakFile(self): + if self.from_f == self.correspond_f: + self.from_f = "" + self.correspond_f = "" + self.cheak = True + return True + else: + self.from_f = "" + self.correspond_f = "" + self.cheak = False + return False + + def repeat(self,count,from_file_path,correspond_file_path): + if not i == 0 or not int: + pass + else: + if from_file_path is list and correspond_file_path is list: + for i in range(count): + for Cf in from_file_path: + for Ff in correspond_file_path: + setup(self,from_file_path,correspond_file_path) + cheakFile(self) + +class cleanFile: + import os + import threading + import time + + def __init__(self,file_source = "temp/update-data-main/"): + import os + if file_source == "temp/update-data-main/": + with open("info", "r") as inf: + inf = inf.read() + file_source = file_source+inf+"/" + return os.remove(file_source) + +class replaceFile: + """ + from tkinter import * + from tkinter.ttk import * + """ + import tkinter.messagebox + import os + + count = 1 + arg = """\ + game_socket-client_2P-GUIv2.py, + game_socket-server_2P-GUIv2.py, + view.py + + """ + + def __init__(self,file_source:str = "temp/update-data-main/",file_destination:str = "./",show_windows:bool = True,args:str = arg): + """ + show_windows => True & False . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.show_windows = show_windows + if file_source == "temp/update-data-main/": + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + self.replace_file(args) + + def replace_file(self,args = arg): + pram = args + + import os + import tkinter.messagebox + + i = 1 + for arg in pram.split(","): + cheak = False + if self.file_source == "temp/update-data-main/": + cheak = cheakFile(arg,self.file_source+arg) + if not cheak: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + #更新目前檔案 + + get_files = os.listdir(self.file_source) + + for g in get_files: + os.replace(self.file_source + g, self.file_destination + g) + print(g) + """ + count += 1 + return count + """ + else: + if i == len(pram.split(",")): + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + + i += 1 + +class packageFile: + import os + import threading + import time + + version = "0.0.0" + file_source = "" + file_destination = "" + from_file_path = None + correspond_file_path = None + from_f = "" + correspond_f = "" + mode = "" + from_file_list = [] + file_list = [] + from_dir_list = [] + dir_list = [] + report = [] + t, rlock, semaphore = [], [], [] + def find_dir(self,from_file_path,correspond_file_path,tc = 0,ti = 0): + """ + copy from "https://yanwei-liu.medium.com/python-os%E6%A8%A1%E7%B5%84%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98-90c652e917c6" + & https://blog.gtwang.org/programming/python-threading-multithreaded-programming-tutorial/ + """ + import os + import threading + import time + + #def add_FFL(self,from_file_path): + # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱 + for fd in os.listdir(from_file_path): + #if fd is "": + # continue + from_full_path = os.path.join(from_file_path,fd).replace("\\","/") + if os.path.isdir(from_full_path): + print('資料夾:',from_full_path) + #self.find_dir(from_full_path,correspond_file_path) + self.from_dir_list.append(from_full_path) + else: + print('檔案:',from_full_path) + + self.from_file_list.append(from_full_path) + print("=-" * 20) + """ + if from_file_path is str: + add_FFL(from_file_path) + if from_file_path is list: + for ff in correspond_file_path: + add_FFL(ff) + """ + #def add_CFL(self,correspond_file_path): + """ + for fd in os.listdir(correspond_file_path): + full_path = os.path.join(correspond_file_path,fd).replace("\\","/") + if os.path.isdir(full_path): + print('資料夾:',full_path) + #self.find_dir(full_path,correspond_file_path)\ + self.dir_list.append(full_path) + else: + print('檔案:',full_path) + + self.file_list.append(full_path) + """ + """ + if correspond_file_path is str: + add_CFL(correspond_file_path) + elif correspond_file_path is list: + for cf in correspond_file_path: + add_CFl(cf) + """ + report = self.report + for FFL in self.from_file_list: + ''' + CFL = "" + for FL in self.file_list: + CFL = FL + #print(FFL,"\n") + #print(CFL) + + r = self.setup(str(FFL),str(CFL)) + #print("r=",r) + cf = False + #if not r == None: + cf = self.package() + #print(FFL+" = "+CFL+"\t"+str(cf)) + report.append(FFL+" = "+CFL+"\t"+str(cf)+",\n") + ''' + try: + with open("version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #Ff.split(".").pop() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + try: + with open(from_file_path+"version","r") as v: + v = v.read() + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + except: + with open("version","w") as v: + v = v.write(self.version) + if ".py" in FFL: + Ff = FFL + #Ff.split(".").pop() + thr = threading.Thread(target = self.package, + args = [ + str(Ff), + "unicorn.ico", + v + ] + ) + Rl = threading.RLock() + Sem = threading.Semaphore(3) + thr.start() + Rl.acquire() + Sem.acquire() + #self.package(str(Ff),"unicorn.ico",v) + #print(Ff,"has been packaged.") + thr.join() + Rl.release() + Sem.release() + report.append(FFL) + if self.show_windows: + tkinter.messagebox.showinfo("showinfo", "完成") + + #""" + print(self.from_dir_list,"\t",self.dir_list) + from_dirList = "" + dirList = "" + if self.from_dir_list == []: + from_dirList = from_file_path + + if self.dir_list == []: + dirList = correspond_file_path + + #t2, rlock2, semaphore2 = None, None, None + #t, rlock, semaphore = self.t, self.rlock, self.semaphore + c, i = 0, 0 + th, rl, sem = 0, 0, 0 + + try: + print(self.from_dir_list[tc]) + except: + pass + try: + pass#print(self.dir_list[ti]) + except: + pass + + state = False + if not self.from_dir_list == []: + state = True + for from_dirList in self.from_dir_list: + #from_dirList = from_dir_list + if c < tc: + continue + """ + if not self.dir_list == []: + for dirList in self.dir_list: + #dir_list = dir_list + if i < ti: + continue + """ + print(from_dirList,dirList,"+"*10) + time.sleep(0.005) + self.t.append( + threading.Thread(target = self.find_dir,args = [ + from_dirList, + dirList, + len(self.from_dir_list)-1, + len(self.dir_list)-1 + ] + ) + ) + self.rlock.append(threading.RLock()) + self.semaphore.append(threading.Semaphore(2)) + th, rl, sem = len(self.t)-1, len(self.rlock)-1, len(self.semaphore)-1 + self.rlock[rl].acquire() + self.semaphore[sem].acquire() + #self.t, self.rlock, self.semaphore = t, rlock, semaphore + # 執行該子執行緒 + self.t[th].start() + + """ + time.sleep(0.005) + t2 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock2 = threading.RLock() + semaphore2 = threading.Semaphore(2) + rlock2.acquire() + semaphore2.acquire() + # 執行該子執行緒 + t2.start() + """ + """ + self.dir_list.remove(dirList) + """ + #i += 1 + + self.from_dir_list.remove(from_dirList) + + + c += 1 + elif not self.dir_list == []: + print("self.from_dir_list is ",self.from_dir_list) + else: + print("self.from_dir_list&self.dir_list is ",self.from_dir_list,self.from_dir_list) + return report + print(from_dirList,dirList) + if from_dirList == "" or dirList == "": + #print(from_dirList,",",dirList,self.report) + return report + """ + time.sleep(0.5) + t1 = threading.Thread(target = self.find_dir(from_dirList,dirList)) + rlock1 = threading.RLock() + semaphore1 = threading.Semaphore(1) + rlock1.acquire() + semaphore1.acquire() + # 執行該子執行緒 + t1.start() + """ + + #t2 = threading.Thread(target = self.find_dir(from_dir_list,dir_list)) + """ + # 主執行緒繼續執行自己的工作 + for i in range(3): + print("Main thread:", i) + time.sleep(1) + """ + + + """ + + + # 等待 t1 這個子執行緒結束 + t1.join() + rlock1.release() + semaphore1.release() + # 等待 t2 這個子執行緒結束 + """ + """ + t2.join() + rlock2.release() + semaphore2.release() + + """ + if state: + self.t[th].join() + self.rlock[rl].release() + self.semaphore[sem].release() + + self.report = [] + self.from_file_list = [] + self.file_list = [] + return report + + def __init__(self,file_source = "temp/update-data-main/",file_destination = "./",version = "0.0.0",mode = "file"): + """ + mode => "file" & "path" . + return => None . + + """ + + self.file_source = file_source + self.file_destination = file_destination + self.version = version + if mode == "file": + self.show_windows = True + elif mode == "path": + self.show_windows = False + + with open("info", "r") as inf: + inf = inf.read() + self.file_source = file_source+inf+"/" + + def package(self,fileName,icon = "unicorn.ico",version = "0.0.0"): + import os + import time + + file_name = fileName.split("/").pop() + + + i = 0 + with open(self.file_source+"config","r") as config: + config = config.read() + #print("config:",config) + for c in config.split(",\n"): + #print(file_name,type(file_name),c,type(c)) + print("[",file_name,"<=>",c,"]") + i += 1 + if file_name in c and c in file_name: + continue + i -= 1 + print("i:",i) + + if not i == 1: + return + + print(fileName,"has been packaged.") + + s = -1 + + try: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,os.path.abspath(fileName).replace("\\","/")) + + print(args) + + s = os.system("pyinstaller.exe " + args) + except: + args = '''\ + --noconfirm --onefile --windowed --icon \"%s\" --debug \"all\" --disable-windowed-traceback --osx-bundle-identifier \"%s\" --target-architecture \"x86_64,arm64,universal2\" \"%s\" + '''%(icon,version,fileName) + + print(args) + + s = os.system("pyinstaller.exe " + args) + print(s) + if not s: + start, end = int(time.time()), int(time.time()) + #time.sleep(30) + while not end-start >= 3: + end = time.time() + print(start,end) + file_name = file_name.split(".",-1) + file_name.pop() + file_name = ".".join(file_name) + print(file_name) + #os.remove(file_name+".spec") + cleanFile(file_name+".spec") + replaceFile("dist/",self.file_destination,self.show_windows,file_name+".exe") + def main(self): + self.find_dir(self.file_source,self.file_destination) diff --git a/pythonController-autoUpdate/config b/pythonController-autoUpdate/config index 6c2ca3d..d254474 100644 --- a/pythonController-autoUpdate/config +++ b/pythonController-autoUpdate/config @@ -1,3 +1,3 @@ -runV3.py, -__main__V0_11.py -webDownloader-beta2.11.7.py +runV5.py, +__main__V0_12.py, +webDownloader-beta2.11.10.py \ No newline at end of file diff --git a/pythonController-autoUpdate/info b/pythonController-autoUpdate/info index 248b2b6..eb6e775 100644 --- a/pythonController-autoUpdate/info +++ b/pythonController-autoUpdate/info @@ -1 +1 @@ -PythonContral \ No newline at end of file +pythonController-autoUpdate \ No newline at end of file diff --git a/pythonController-autoUpdate/packageTest.py b/pythonController-autoUpdate/packageTest.py new file mode 100644 index 0000000..93c3869 --- /dev/null +++ b/pythonController-autoUpdate/packageTest.py @@ -0,0 +1,3 @@ +from cheakfileV1_5_6 import packageFile +packageFile(mode="path").main() +#cleanFile() diff --git a/pythonController-autoUpdate/packageTest1.5.7.py b/pythonController-autoUpdate/packageTest1.5.7.py new file mode 100644 index 0000000..109bd1f --- /dev/null +++ b/pythonController-autoUpdate/packageTest1.5.7.py @@ -0,0 +1,3 @@ +from cheakfileV1_5_7 import packageFile +packageFile(mode="path").main() +#cleanFile() diff --git a/pythonController-autoUpdate/run.py b/pythonController-autoUpdate/run.py index 9193c5e..dd20100 100644 --- a/pythonController-autoUpdate/run.py +++ b/pythonController-autoUpdate/run.py @@ -1,469 +1,4 @@ -# -*- coding: UTF-8 -*- -import socket -import os -import random -import time -import tkinter as tk -import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 - -window = tk.Tk() -#window.title("socket-game-%s_2P"%(mode)) -window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 - -basePath = "./" -def ctrl_s_cli_2(): - #messagebox.showinfo("Find Next","尋找下一筆") - """ - fileName = "game_socket-client_2P-GUIv2.2" - if not os.path.isfile(os.path.join(basePath,fileName+".exe")): - exec(open(fileName+".py","rb").read()) - else: - os.system(fileName+".exe") - """ - main.M_client() -def ctrl_s_ser_2(): - #messagebox.showinfo("Find Pre","尋找上一筆") - """ - fileName = "game_socket-server_2P-GUIv2.2" - if not os.path.isfile(os.path.join(basePath,fileName+".exe")): - exec(open(fileName+".py","rb").read()) - else: - os.system(fileName+".exe") - """ - main.M_server() -def import_lib(mode): - import socket - import os - import random - import time - import tkinter as tk - import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 - #from goto import with_goto,_make_code - #@with_goto - window = tk.Tk() - window.title("socket-game-%s_2P"%(mode)) - #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 - top_frame = tk.Frame(window) - - # 將元件分為 top/bottom 兩群並加入主視窗 - top_frame.pack() - result_label = tk.Label(top_frame) - result_label.pack() -def setup_game_client(): - pass - -def cheak_file(filepath,command=""): - """ - if command != "": - exec(lambda command) - """ - return os.path.exists(filepath) -def save_file(filepath,data): - with open(filepath, 'w') as f: - f.write(data) - f.close() - return -def read_file(filepath): - with open(filepath, 'r') as f: - data = f.read() - f.close() - return data - -def client(): - - low, high = 1, 100 - ans = random.randint(low, high) - #ans = ans_entry.get() - while int(ans) <= 0 or int(ans) >= 100: - ans = ans_entry.get() - ans = abs(int(ans)) - count = 0 - second = 0 - #print(ans) - - ip_check = 0 - - file = "client-answerdatalog.csv" - files = "highest.txt" - - ip_log = "ip-list" - - - if not cheak_file(ip_log): - last_ip = "" - else: - last_ip = read_file(ip_log) - - """ - f = open(ip_log) - last_ip = f.read() - f.close() - """ - ip_check = 1 - - - if not cheak_file(files): - last = float("inf") - else: - last = read_file(files) - - if not type(last) == int: - last = float("inf") - else: - last = int(last) - - """ - f = open(files) - last = int(f.read()) - f.close() - """ - - - # 客戶端 - # 宣告協議型別,同時生成socket物件 - client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - # - rdn = random.randint(0,9) - #for i in range(0,3): - rdn1 = random.randint(0,9) - rdn2 = random.randint(0,9) - rdn3 = random.randint(0,9) - #"{}{}".format("rdn",str(i)) = rdn - - #print(rdn+str(i)) - rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) - print("port(",rdn,")") - result_label.configure(text="port("+str(rdn)+")") - - port = port_entry.get() - if ip_check == 1: - print(last_ip) - #q = input("要使用上一個IP位址嗎?(y/n)") - enter_label.configure(text="要使用上一個IP位址嗎?") - - def yes(): - #if q == "y" or q == "Y" or q == "yes" or q == "Yes": - ip = last_ip - qy_btn.pack_forget() - qn_btn.pack_forget() - def no(): - #elif q == "n" or q == "N" or q == "no" or q == "No": - ip = ip_entry.get() - save_file(ip_log,ip) - - """ - f = open(ip_log,"w") - f.write(ip) - f.close() - """ - qy_btn.pack_forget() - qn_btn.pack_forget() - qy_btn = tk.Button(top_frame, text='確定', command=yes) - qy_btn.pack() - qn_btn = tk.Button(top_frame, text='取消', command=no) - qn_btn.pack() - else: - ip = ip_entry.get() - save_file(ip_log,ip) - - """ - f = open(ip_log,"w") - f.write(ip) - f.close() - """ - try: - client.connect((ip, int(port))) # 服務端ip和埠 - except: - print("請輸入正確的數字") - return - port = port_entry.get() - ip = ip_entry.get() - client.connect((ip, int(port))) # 服務端ip和埠 - # python3 接收位元組流資料 - hostname = socket.gethostname() - ip = socket.gethostbyname(hostname) - enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) - print("Your computer name is ",hostname,",Your ip address is ",ip) - msg = ip - client.send(msg.encode('utf-8')) - time.sleep(1) - while True: - - msg = str(rdn)#input('>>:')#.strip() - if len(msg) == 0: - continue - client.send(msg.encode('utf-8')) - data = client.recv(1024) # 1024位元組的資料 - enter_label.configure(text=data.decode()) - print(data.decode()) - client.close() - #time.sleep(1) - break -def begin_game_client(): - #game begin - server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - server.bind(('0.0.0.0', rdn)) - enter_label.configure(text=server.getsockname()) - print(server.getsockname()) - # 監聽埠 - server.listen(20) # 監聽 - while True: - conn, address = server.accept() - enter_label.configure(text="進入等待時間....") - print("進入等待時間....") - data_server = conn.recv(1024) - if not data_server: - enter_label.configure(text="client is lost...") - print("client is lost...") - break - #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 - res_ans = data_server.decode() - # 返回結果 - #conn.send(res_ans.encode('utf-8')) - #res = int(res) - #print(res) - - #print(ans) - conn.send(str(ans).encode('utf-8')) - ans = int(res_ans) - #time.sleep(1) - data_server = conn.recv(1024) - res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 - # 返回結果 - #conn.send(res_boolen.encode('utf-8')) - #print(res) - time.sleep(1) - data_server = conn.recv(1024) - res_boolen = data_server.decode() - print(res_boolen)#.split('~')) - print(bool(res_boolen)) - if bool(res_boolen): - break - i = 0 -#--------------------------------------------------- -state = 0 -def setup_game_server(): - state = 0 - - # 宣告協議型別 - server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - # 繫結本地網絡卡(多網絡卡選擇),埠 - rdn = str(random.randint(0,9)) - for i in range(0,3): - rdn = rdn + str(random.randint(0,9)) - - - result_label.configure(text="port("+str(rdn)+")") - - print("port(",rdn,")") - server.bind(('localhost', int(rdn))) - print(server.getsockname()) - #print(server.bind(('localhost',8888))) - hostname = socket.gethostname() - ip = socket.gethostbyname(hostname) - enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) - print("Your computer name is ",hostname,",Your ip address is ",ip) - state = 1 - res_boolen = False - - low, high = 1, 100 - #ans = random.randint(low, high) - ans = ans_entry.get() - - ans_entry.pack_forget() - - if int(ans) <= 0 or int(ans) > 100: - ans = ans_entry.delete(0,END) - return - ans = abs(int(ans)) - count = 0 - second = 0 - #print(ans) - - file = "server-answerdatalog.csv" - files = "highest.txt" -def server(): - count = 0 - second = 0 - - save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") - """ - ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") - ansf.write(str(ans) + "\t\t\t\t") - ansf.close() - """ - """ - ansf = open(file, "w") - ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") - ansf.write(str(ans) + "\t\t\t\t") - ansf.close() - """ - if state == 1: - # 監聽埠 - #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - server.listen(20) # 監聽 - #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - - while True: - - conn, address = server.accept() - enter_label.configure(text="進入等待時間....") - print("進入等待時間....") - while True: - enter_label.configure(text="收到連線....") - print("收到連線....") - # 接收資料 - data_server = conn.recv(1024) - if not data_server: - enter_label.configure(text="client is lost...") - print("client is lost...") - break - res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 - enter_label.configure(text="收到連線....") - print("收到連線....") - print(res_ip) - - # 接收資料 - data_server = conn.recv(1024) - if not data_server: - enter_label.configure(text="client is lost...") - print('client is lost...') - break - res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 - # 返回結果 - #conn.send(res.encode('utf-8')) - conn.close() - res = data_server.decode() - enter_label.configure(text=res) - print(res) - #time.sleep(1) - break - break -def begin_game_server(): - #game begin - client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - client.connect((res_ip, int(res))) # 服務端ip和埠 - enter_label.configure(text="正在等待連線....") - print("正在等待連線....") - msg = str(ans)#input('>>:')#.strip() - - client.send(msg.encode('utf-8')) - time.sleep(1.5) - - while True: - - enter_label.configure(text="已連線") - print("已連線") - msg = '開始遊戲'#input('>>:')#.strip() - if len(msg) == 0: - continue - client.send(msg.encode('utf-8')) - time.sleep(1.5) - #client.send(str(ans).encode('utf-8')) - #ans = 0 - data = client.recv(1024) # 1024位元組的資料 - - ans = int(data.decode()) - #print(ans) - #print(ranges) - #client.close() - time.sleep(0.5) - msg = '1' - client.send(msg.encode('utf-8')) - - data = client.recv(1024) # 1024位元組的資料 - #ans = int(data.decode()) - res_boolen = data.decode() - print(bool(res_boolen)) - if bool(res_boolen): - client.send(" ".encode('utf-8')) - data = client.recv(1024) # 1024位元組的資料 - #ans = int(data.decode()) - res_boolen = data.decode() - if bool(res_boolen): - - break - i = 0 - #guest = random.randint(low, high) - - enter_label.pack_forget() - - -def __main__(): - top_frame = tk.Frame(window) - bottom_frame = tk.Frame(window) - - # 將元件分為 top/bottom 兩群並加入主視窗 - top_frame.pack() - result_label = tk.Label(top_frame) - result_label.pack() - port_label = tk.Label(top_frame, text='port:') - port_label.pack(side=tk.LEFT) - port_entry = tk.Entry(top_frame) - port_entry.pack(side=tk.LEFT) - ip_label = tk.Label(top_frame, text='ip:') - ip_label.pack(side=tk.LEFT) - ip_entry = tk.Entry(top_frame) - ip_entry.pack(side=tk.LEFT) - enter_label = tk.Label(window) - enter_label.pack() - - calculate_btn = tk.Button(window, text='馬上開始連線', command=main) - calculate_btn.pack() - - # 以下為 bottom 群組 - # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) - - bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=quit) - # 讓系統自動擺放元件(靠下方) - bottom_button.pack(side=tk.BOTTOM) - -m = "" - -class main: - m = "" - def M_client(self,mode): - self.m = mode - #self.m = "client" - if self.m == "client": - M_client() - elif m == "server": - M_server() - else: - pass - import_lib("client") - setup_game_client() - #client function ctrl_s_cli_2() - client() - begin_game_client() - def M_server(self,mode): - self.m = mode - #self.m = "server" - if self.m == "client": - M_client() - elif m == "server": - M_server() - else: - pass - import_lib("server") - setup_game_server() - #server function ctrl_s_ser_2() - server() - begin_game_server() - def __init__(self,mode): - """ - mode => "client" & "server" . - """ - __main__() - if self.m == "client": - self.M_client(mode) - elif m == "server": - self.M_server(mode) - else: - pass -class setting: - m = "" - def __init__(self,mode): - if mode is str: - self.m = mode - window.title("setting:socket-game-%s_2P"%(mode)) +from runV4 import * +import runV4 as run +def _exit(): + run._exit() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV0.py b/pythonController-autoUpdate/runV0.py new file mode 100644 index 0000000..dd32ed8 --- /dev/null +++ b/pythonController-autoUpdate/runV0.py @@ -0,0 +1,626 @@ +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 + +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main("client") + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main("server") + +def __main__(): + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='port:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='ip:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + calculate_btn = tk.Button(window, text='馬上開始連線', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def import_lib(mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + +def setup_game_client(): + pass + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +def client(): + + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + low, high = 1, 100 + ans = random.randint(low, high) + #ans = ans_entry.get() + while int(ans) <= 0 or int(ans) >= 100: + ans = ans_entry.get() + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9) + #for i in range(0,3): + rdn1 = random.randint(0,9) + rdn2 = random.randint(0,9) + rdn3 = random.randint(0,9) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + rdn = int("{}{}{}{}".format(rdn,rdn1,rdn2,rdn3)) + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check == 1: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的數字") + return + port = port_entry.get() + ip = ip_entry.get() + client.connect((ip, int(port))) # 服務端ip和埠 + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break +def begin_game_client(): + #game begin + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(('0.0.0.0', rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 +#--------------------------------------------------- +state = 0 +def setup_game_server(): + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('localhost', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans = ans_entry.get() + + ans_entry.pack_forget() + + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" +def server(): + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break +def begin_game_server(): + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + + +#m = "" + +class setting: + m = "" + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + + + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + + + + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + import_lib("client") + setup_game_client() + #client function ctrl_s_cli_2() + client() + begin_game_client() + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + import_lib("server") + setup_game_server() + #server function ctrl_s_ser_2() + server() + begin_game_server() + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + +def _exit(): + global window + window.destroy() + if main_state: + exit() + +if __name__ == '__main__': + window.title("menu:socket-selet") + __main__() + window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV1.py b/pythonController-autoUpdate/runV1.py new file mode 100644 index 0000000..b57f5fb --- /dev/null +++ b/pythonController-autoUpdate/runV1.py @@ -0,0 +1,815 @@ +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading + +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main("client") + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main("server") + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "0.0.0.0" + window = None + def setup_game_client(self): + pass + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + low, high = 1, 100 + ans = random.randint(low, high) + #ans = ans_entry.get() + while int(ans) <= 0 or int(ans) >= 100 or ans == "": + ans = ans_entry.get() + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check == 1: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的數字") + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的數字") + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='port:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='ip:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + self.setup_game_client() + #client function ctrl_s_cli_2() + if not self.client(): + return + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +class setting: + m = "" + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + + + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + + + + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + +def _exit(): + global window + window.destroy() + if main_state: + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + window.title("menu:socket-selet") + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV2.py b/pythonController-autoUpdate/runV2.py new file mode 100644 index 0000000..5a9a41f --- /dev/null +++ b/pythonController-autoUpdate/runV2.py @@ -0,0 +1,828 @@ +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading + +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "" + window = None + def setup_game_client(self): + pass + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.warning() + self.load() + return False + low, high = 1, 100 + ans = random.randint(low, high) + #ans = ans_entry.get() + while int(ans) <= 0 or int(ans) >= 100 or ans == "": + ans = ans_entry.get() + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check == 1: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的IP位址或Port埠號") + self.warning() + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的IP位址或Port埠號") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='目標Port埠號:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='目標IP位址:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + self.setup_game_client() + #client function ctrl_s_cli_2() + if not self.client(): + return + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入終極數字密碼") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +setting_var = """ +#state = False +#global mode +#global setting_state +#mode = m +varMode = "client" +var = tk.StringVar() +#varC = tk.StringVar() +#varS = tk.StringVar() +""" + +setting_frame = """ +client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) +server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) +""" + +setting_pack = """ +self.client_radiobtn.pack_forget() +self.client_radiobtn.pack() +self.server_radiobtn.pack_forget() +self.server_radiobtn.pack() +""" + +class setting: + m = "" + exec(setting_var) + exec(setting_frame) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + exec(setting_pack) + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + +def _exit(): + global window + window.destroy() + if main_state: + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + window.title("menu:socket-selet") + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV3.py b/pythonController-autoUpdate/runV3.py new file mode 100644 index 0000000..bacca9d --- /dev/null +++ b/pythonController-autoUpdate/runV3.py @@ -0,0 +1,860 @@ +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading + +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "" + window = None + def setup_game_client(self): + pass + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.warning() + self.load() + return False + low, high = 1, 100 + ans = random.randint(low, high) + #ans = ans_entry.get() + while int(ans) <= 0 or int(ans) >= 100 or ans == "": + ans = ans_entry.get() + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check == 1: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + import tkinter.messagebox as msg + q = msg.askyesno(title="socket-game-client_2P", message="要使用上一個IP位址嗎?") + if q: + ip = last_ip + else: + ip = ip_entry.get() + save_file(ip_log,ip) + ''' + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + ''' + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的IP位址或Port埠號") + self.warning() + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的IP位址或Port埠號") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='目標Port埠號:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='目標IP位址:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + self.setup_game_client() + #client function ctrl_s_cli_2() + if not self.client(): + return + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入終極數字密碼") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +setting_var = """ +#state = False +#global mode +#global setting_state +#mode = m +varMode = "client" +var = tk.StringVar() +#varC = tk.StringVar() +#varS = tk.StringVar() +""" + +setting_frame = """ +client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) +server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) +""" + +setting_pack = """ +self.client_radiobtn.pack_forget() +self.client_radiobtn.pack() +self.server_radiobtn.pack_forget() +self.server_radiobtn.pack() +""" + +class setting: + m = "" + """ + exec(setting_var) + exec(setting_frame) + """ + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + #exec(setting_pack) + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + +def _exit(): + global window + window.destroy() + if main_state: + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + window.title("menu:socket-selet") + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV4.py b/pythonController-autoUpdate/runV4.py new file mode 100644 index 0000000..0662969 --- /dev/null +++ b/pythonController-autoUpdate/runV4.py @@ -0,0 +1,861 @@ +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading + +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "" + window = None + def setup_game_client(self): + pass + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.warning() + self.load() + return False + low, high = 1, 100 + ans = random.randint(low, high) + #ans = ans_entry.get() + while int(ans) <= 0 or int(ans) >= 100 or ans == "": + ans = ans_entry.get() + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check == 1: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + import tkinter.messagebox as msg + q = msg.askyesno(title="socket-game-client_2P", message="要使用上一個IP位址嗎?") + if q: + ip = last_ip + else: + ip = ip_entry.get() + save_file(ip_log,ip) + ''' + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + ''' + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的IP位址或Port埠號") + self.warning() + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的IP位址或Port埠號") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='目標Port埠號:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='目標IP位址:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + self.setup_game_client() + #client function ctrl_s_cli_2() + if not self.client(): + return + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入終極數字密碼") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +setting_var = """ +#state = False +#global mode +#global setting_state +#mode = m +varMode = "client" +var = tk.StringVar() +#varC = tk.StringVar() +#varS = tk.StringVar() +""" + +setting_frame = """ +client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) +server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) +""" + +setting_pack = """ +self.client_radiobtn.pack_forget() +self.client_radiobtn.pack() +self.server_radiobtn.pack_forget() +self.server_radiobtn.pack() +""" + +class setting: + m = "" + """ + exec(setting_var) + exec(setting_frame) + """ + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + #exec(setting_pack) + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + __main__() + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + +def _exit(): + global window + window.destroy() + if main_state: + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +window.title("menu:socket-selet") +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV5.py b/pythonController-autoUpdate/runV5.py new file mode 100644 index 0000000..89ed245 --- /dev/null +++ b/pythonController-autoUpdate/runV5.py @@ -0,0 +1,870 @@ +# -*- coding: UTF-8 -*- +import socket +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading + +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + top_frame.forget() + bottom_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + if not main_state: + return + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "" + window = None + def setup_game_client(self): + pass + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.warning() + self.load() + return False + low, high = 1, 100 + ans = random.randint(low, high) + #ans = ans_entry.get() + while int(ans) <= 0 or int(ans) >= 100 or ans == "": + ans = ans_entry.get() + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + ip_check = 0 + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check == 1: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + import tkinter.messagebox as msg + q = msg.askyesno(title="socket-game-client_2P", message="要使用上一個IP位址嗎?") + if q: + ip = last_ip + else: + ip = ip_entry.get() + save_file(ip_log,ip) + ''' + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + ''' + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的IP位址或Port埠號") + self.warning() + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的IP位址或Port埠號") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + top_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='目標Port埠號:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='目標IP位址:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + self.setup_game_client() + #client function ctrl_s_cli_2() + if not self.client(): + return + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入終極數字密碼") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + top_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +setting_var = """ +#state = False +#global mode +#global setting_state +#mode = m +varMode = "client" +var = tk.StringVar() +#varC = tk.StringVar() +#varS = tk.StringVar() +""" + +setting_frame = """ +client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) +server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) +""" + +setting_pack = """ +self.client_radiobtn.pack_forget() +self.client_radiobtn.pack() +self.server_radiobtn.pack_forget() +self.server_radiobtn.pack() +""" + +class setting: + m = "" + """ + exec(setting_var) + exec(setting_frame) + """ + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + #exec(setting_pack) + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + #__main__() + if not main_state: + __main__() + #window.mainloop() + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + window.mainloop() + +def _exit(): + global window + if main_state: + window.destroy() + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +window.title("menu:socket-selet") +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + main_state = True + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV6.py b/pythonController-autoUpdate/runV6.py new file mode 100644 index 0000000..847f3d0 --- /dev/null +++ b/pythonController-autoUpdate/runV6.py @@ -0,0 +1,951 @@ +# -*- coding: UTF-8 -*- +import socket +import ipaddress +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading +import ssl + +context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) +context.verify_mode = ssl.CERT_REQUIRED +context.check_hostname = True +context.load_default_certs() +""" +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com') +ssl_sock.connect(('www.verisign.com', 443)) +""" +def init(): + #while True: + """ + rdn = random.randint(0,9999) + rdn = "%04d"%rdn + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + del ip1 + del ip2 + del ip3 + """ + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + net4 = ipaddress.ip_network(ip) + ipList = random.sample(list(net4),len(list(net4))-1) + for ip in ipList: + ip_format = list(net4)[ip]#+":"+rdn + if not os.path.exists("ip"): + with open("ip", "w") as ipf: + ipf.write(ip_format) + if ip_format in net4.hosts(): + print(ip_format) + #ip = ipaddress.ip_address(ip_format) + if ip_format.is_link_local: + print(ip_format.broadcast_address) + ipaddress.ip_network(ip_format, strict=True) + print(socket.gethostbyaddr(str(ip_format))) + break +init() +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + top_frame.forget() + bottom_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + if not main_state: + return + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "" + window = None + def setup_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.warning() + self.load() + return False + ip_check = 0 + + ip = "0.0.0.0" + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + self.client = client + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + import tkinter.messagebox as msg + q = msg.askyesno(title="socket-game-client_2P", message="要使用上一個IP位址嗎?") + if q: + ip = last_ip + else: + ip = ip_entry.get() + save_file(ip_log,ip) + ''' + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + ''' + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的IP位址或Port埠號") + self.warning() + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + + ans_entry.pack() + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + low, high = 1, 100 + #ans = random.randint(low, high) + ans = ans_entry.get() + if ans == "": + ans = abs(int(ans)) + if int(ans) < low or int(ans) >= high or ans == "": + return True + return False + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + ans_entry = self.ans_entry + client = self.client + rdn = self.rdn + ans = self.ans + + low, high = 1, 100 + + count = 0 + second = 0 + #print(ans) + + + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的IP位址或Port埠號") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + top_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='目標Port埠號:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='目標IP位址:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + if not self.setup_game_client(): + return + #client function ctrl_s_cli_2() + self.client() + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入終極數字密碼") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + top_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +setting_var = """ +#state = False +#global mode +#global setting_state +#mode = m +varMode = "client" +var = tk.StringVar() +#varC = tk.StringVar() +#varS = tk.StringVar() +""" + +setting_frame = """ +client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) +server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) +""" + +setting_pack = """ +self.client_radiobtn.pack_forget() +self.client_radiobtn.pack() +self.server_radiobtn.pack_forget() +self.server_radiobtn.pack() +""" + +class setting: + m = "" + """ + exec(setting_var) + exec(setting_frame) + """ + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + #exec(setting_pack) + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + #__main__() + if not main_state: + __main__() + #window.mainloop() + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + window.mainloop() + +def _exit(): + global window + if main_state: + window.destroy() + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +window.title("menu:socket-selet") +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + main_state = True + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/runV6_new.py b/pythonController-autoUpdate/runV6_new.py new file mode 100644 index 0000000..9e332f3 --- /dev/null +++ b/pythonController-autoUpdate/runV6_new.py @@ -0,0 +1,950 @@ +# -*- coding: UTF-8 -*- +import socket +import ipaddress +import os +import random +import time +import tkinter as tk +#import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯 +import threading +import ssl + +context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) +context.verify_mode = ssl.CERT_REQUIRED +context.check_hostname = True +context.load_default_certs() +""" +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com') +ssl_sock.connect(('www.verisign.com', 443)) +""" +def init(): + while True: + """ + rdn = random.randint(0,9999) + rdn = "%04d"%rdn + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + del ip1 + del ip2 + del ip3 + """ + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + net4 = ipaddress.ip_network(ip) + ip = random.randint(0,len(list(net4))-1) + ip_format = list(net4)[ip]#+":"+rdn + if not os.path.exists("ip"): + with open("ip", "w") as ipf: + ipf.write(ip_format) + if ip_format in net4.hosts(): + print(ip_format) + #ip = ipaddress.ip_address(ip_format) + if ip_format.is_link_local: + print(ip_format.broadcast_address) + ipaddress.ip_network(ip_format, strict=True) + print(socket.gethostbyaddr(str(ip_format))) + break +init() +window = tk.Tk() +#window.title("socket-game-%s_2P"%(mode)) +window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + +#global setting_state, main_state, mode + +setting_state = False +main_state = False +state = 0 #use for class server +mode = "" + +basePath = "./" +def ctrl_s_cli_2(): + #messagebox.showinfo("Find Next","尋找下一筆") + """ + fileName = "game_socket-client_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def ctrl_s_ser_2(): + #messagebox.showinfo("Find Pre","尋找上一筆") + """ + fileName = "game_socket-server_2P-GUIv2.2" + if not os.path.isfile(os.path.join(basePath,fileName+".exe")): + exec(open(fileName+".py","rb").read()) + else: + os.system(fileName+".exe") + """ + main() + +def __main__(): + + setting() + + top_frame = tk.Frame(window) + bottom_frame = tk.Frame(window) + + top_frame.forget() + bottom_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + bottom_frame.pack() + if not main_state: + return + calculate_btn = tk.Button(top_frame, text='下一步', command=main) + calculate_btn.pack() + + # 以下為 bottom 群組 + # bottom_button 綁定 echo_hello 事件處理,點擊該按鈕會印出 hello world :) + + bottom_button = tk.Button(bottom_frame, text='離開', fg='black', command=_exit) + # 讓系統自動擺放元件(靠下方) + bottom_button.pack(side=tk.BOTTOM) + #======================================= + menubar = tk.Menu(window) # 建立最上層功能表 + # 建立功能表類別物件,和將此功能表類別命名File + filemenu = tk.Menu(menubar,tearoff=False) + menubar.add_cascade(label="File",menu=filemenu,underline=0) + # 在File功能表內建立功能表清單 + updatamenu = tk.Menu(filemenu,tearoff=False) # 取消分隔線 + filemenu.add_cascade(label="Help",menu=updatamenu,underline=0) + # 首先在File功能表內建立updata子功能表物件 + #updatamenu.add_command(label="cheakUpdata",command=_cheakUpdate,underline=0) + # 首先在File功能表內建立find子功能表物件 + #findmenu.add_command(label="game_socket-client_2P-GUIv2.1.py",command=game_s_cli_2) + #findmenu.add_command(label="game_socket-server_2P-GUIv2.1.py",command=game_s_ser_2) + + gamemenu = tk.Menu(menubar,tearoff=False) # 取消分隔線 + menubar.add_cascade(label="Game Setting",menu=gamemenu) + gamemenu.add_command(label="Setting",command=setting,underline=0) + #gamemenu.add_command(label="game_socket-client_2P-GUIv2.2",command=main("client")) + #gamemenu.add_command(label="game_socket-server_2P-GUIv2.2",command=main("server")) + + # 下列是增加分隔線和建立Exit!指令 + filemenu.add_separator() + filemenu.add_command(label="Exit!",command=_exit,underline=0) + + window.config(menu=menubar) # 顯示功能表物件 + +def cheak_file(filepath,command=""): + """ + if command != "": + exec(lambda command) + """ + del command + return os.path.exists(filepath) +def save_file(filepath,data): + with open(filepath, 'w') as f: + f.write(data) + f.close() + return +def read_file(filepath): + with open(filepath, 'r') as f: + data = f.read() + f.close() + return data + +class setup: + def import_lib(self,mode): + #import socket + #import os + #import random + #import time + #import tkinter as tk + #import tkinter.messagebox as msg # messagebox要另行匯入,否則會出錯。 + #from goto import with_goto,_make_code + #@with_goto + #window = tk.Tk() + window.title("socket-game-%s_2P"%(mode)) + #window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + + + def __init__(self,mode): + self.import_lib(mode) + +class client(setup,tk.Frame): + rdn = 0 + ip = "" + window = None + def setup_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + """ + event = threading.Event() + + _state = False + + def s(): + pass + #_state = True + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + + event.wait(9) + + if not _state: + _state = False + """ + + if ip_entry.get() == "" or port_entry.get() == "": + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.warning() + self.load() + return False + ip_check = 0 + + ip = "0.0.0.0" + + file = "client-answerdatalog.csv" + files = "highest.txt" + + ip_log = "ip-list" + + if not cheak_file(ip_log): + last_ip = "" + else: + last_ip = read_file(ip_log) + + """ + f = open(ip_log) + last_ip = f.read() + f.close() + """ + ip_check = 1 + + + if not cheak_file(files): + last = float("inf") + else: + last = read_file(files) + + if not type(last) == int: + last = float("inf") + else: + last = int(last) + + """ + f = open(files) + last = int(f.read()) + f.close() + """ + + + # 客戶端 + # 宣告協議型別,同時生成socket物件 + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + self.client = client + # + rdn = random.randint(0,9999) + rdn = int("%04d"%rdn) + """ + ip = random.randint(0,255) + #for i in range(0,3): + ip1 = random.randint(0,255) + ip2 = random.randint(0,255) + ip3 = random.randint(0,255) + #"{}{}".format("rdn",str(i)) = rdn + + #print(rdn+str(i)) + ip = "{}.{}.{}.{}".format(ip,ip1,ip2,ip3) + """ + self.rdn = rdn + #self.ip = ip + print("port(",rdn,")") + result_label.configure(text="port("+str(rdn)+")") + + port = port_entry.get() + if ip_check: + print(last_ip) + #q = input("要使用上一個IP位址嗎?(y/n)") + import tkinter.messagebox as msg + q = msg.askyesno(title="socket-game-client_2P", message="要使用上一個IP位址嗎?") + if q: + ip = last_ip + else: + ip = ip_entry.get() + save_file(ip_log,ip) + ''' + enter_label.configure(text="要使用上一個IP位址嗎?") + + def yes(): + #if q == "y" or q == "Y" or q == "yes" or q == "Yes": + ip = last_ip + qy_btn.pack_forget() + qn_btn.pack_forget() + def no(): + #elif q == "n" or q == "N" or q == "no" or q == "No": + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + qy_btn.pack_forget() + qn_btn.pack_forget() + qy_btn = tk.Button(top_frame, text='確定', command=yes) + qy_btn.pack() + qn_btn = tk.Button(top_frame, text='取消', command=no) + qn_btn.pack() + ''' + else: + ip = ip_entry.get() + save_file(ip_log,ip) + + """ + f = open(ip_log,"w") + f.write(ip) + f.close() + """ + try: + client.connect((ip, int(port))) # 服務端ip和埠 + except: + print("請輸入正確的IP位址或Port埠號") + self.warning() + port = port_entry.get() + ip = ip_entry.get() + #client.connect((ip, int(port))) # 服務端ip和埠 + top_frame.destroy() + result_label.destroy() + port_label.destroy() + port_entry.destroy() + ip_label.destroy() + ip_entry.destroy() + enter_label.destroy() + self.load() + return False + + ans_entry.pack() + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + low, high = 1, 100 + #ans = random.randint(low, high) + ans = ans_entry.get() + if ans == "": + ans = abs(int(ans)) + if int(ans) < low or int(ans) >= high or ans == "": + return True + return False + + def client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + ans_entry = self.ans_entry + client = self.client + rdn = self.rdn + ans = self.ans + + low, high = 1, 100 + + count = 0 + second = 0 + #print(ans) + + + # python3 接收位元組流資料 + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + #self.ip = ip + enter_label.configure(text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + msg = ip + client.send(msg.encode('utf-8')) + time.sleep(1) + while True: + + msg = str(rdn)#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + enter_label.configure(text=data.decode()) + print(data.decode()) + client.close() + #time.sleep(1) + break + def begin_game_client(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + port_label = self.port_label + port_entry = self.port_entry + ip_label = self.ip_label + ip_entry = self.ip_entry + enter_label = self.enter_label + #game begin + rdn = self.rdn + #ip = self.ip + #print(ip) + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.bind(("localhost", rdn)) + enter_label.configure(text=server.getsockname()) + print(server.getsockname()) + # 監聽埠 + server.listen(20) # 監聽 + while True: + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + #res_ans = os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + res_ans = data_server.decode() + # 返回結果 + #conn.send(res_ans.encode('utf-8')) + #res = int(res) + #print(res) + + #print(ans) + conn.send(str(ans).encode('utf-8')) + ans = int(res_ans) + #time.sleep(1) + data_server = conn.recv(1024) + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res_boolen.encode('utf-8')) + #print(res) + time.sleep(1) + data_server = conn.recv(1024) + res_boolen = data_server.decode() + print(res_boolen)#.split('~')) + print(bool(res_boolen)) + if bool(res_boolen): + break + i = 0 + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入正確的IP位址或Port埠號") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + top_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + port_label = tk.Label(top_frame, text='目標Port埠號:') + port_label.pack(side=tk.LEFT) + port_entry = tk.Entry(top_frame) + port_entry.pack(side=tk.LEFT) + ip_label = tk.Label(top_frame, text='目標IP位址:') + ip_label.pack(side=tk.LEFT) + ip_entry = tk.Entry(top_frame) + ip_entry.pack(side=tk.LEFT) + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + self.port_label = port_label + self.port_entry = port_entry + self.ip_label = ip_label + self.ip_entry = ip_entry + self.enter_label = enter_label + + #event = threading.Event() + + #_state = False + + def s(): + #_state = True + calculate_btn.pack_forget() + self.main() + return + + calculate_btn = tk.Button(top_frame, text='開始連線', command=s) + calculate_btn.pack_forget() + calculate_btn.pack() + """ + event.wait(9) + + while not _state: + _state = False + print(_state) + time.sleep(1) + """ + def main(self): + window = self.window + if not self.setup_game_client(): + return + #client function ctrl_s_cli_2() + self.client() + self.begin_game_client() + #window.mainloop() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + #t = [] + #t.append(threading.Thread(target = self.main())) + self.load() + +#--------------------------------------------------- + +class server(setup,tk.Frame): + window = None + def setup_game_server(self): + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + ans_entry = tk.Entry(top_frame) + self.ans_entry = ans_entry + + state = 0 + + # 宣告協議型別 + server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + # 繫結本地網絡卡(多網絡卡選擇),埠 + rdn = str(random.randint(0,9)) + for i in range(0,3): + rdn = rdn + str(random.randint(0,9)) + + result_label.configure(text="port("+str(rdn)+")") + + print("port(",rdn,")") + server.bind(('', int(rdn))) + print(server.getsockname()) + #print(server.bind(('localhost',8888))) + hostname = socket.gethostname() + ip = socket.gethostbyname(hostname) + enter_label.configure(fg='blue', text="Your computer name is "+hostname+",Your ip address is "+ip) + print("Your computer name is ",hostname,",Your ip address is ",ip) + state = 1 + res_boolen = False + + low, high = 1, 100 + #ans = random.randint(low, high) + ans_entry.pack() + + ans = ans_entry.get() + def s(): + ans = ans_entry.get() + ans_entry.pack_forget() + ctn_btn.pack_forget() + if ans == "": + self.warning() + self.ans = ans + self.main() + ctn_btn = tk.Button(top_frame, text="開始連線", command=s) + ctn_btn.pack() + if ans == "": + return False + + def server(self): + ans = self.ans + ans_entry = self.ans_entry + if int(ans) <= 0 or int(ans) > 100: + ans = ans_entry.delete(0,END) + return + ans = abs(int(ans)) + count = 0 + second = 0 + #print(ans) + + file = "server-answerdatalog.csv" + files = "highest.txt" + + window = self.window + top_frame = self.top_frame + result_label = self.result_label + + enter_label = self.enter_label + + count = 0 + second = 0 + + save_file(file, "正確答案:" + "\t" + "回答次數:" + ",\n" + str(ans) + "\t\t\t\t") + """ + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + """ + ansf = open(file, "w") + ansf.write("正確答案:" + "\t" + "回答次數:" + ",\n") + ansf.write(str(ans) + "\t\t\t\t") + ansf.close() + """ + if state == 1: + # 監聽埠 + #server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + server.listen(20) # 監聽 + #clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + + while True: + + conn, address = server.accept() + enter_label.configure(text="進入等待時間....") + print("進入等待時間....") + while True: + enter_label.configure(text="收到連線....") + print("收到連線....") + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print("client is lost...") + break + res_ip = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + enter_label.configure(text="收到連線....") + print("收到連線....") + print(res_ip) + + # 接收資料 + data_server = conn.recv(1024) + if not data_server: + enter_label.configure(text="client is lost...") + print('client is lost...') + break + res = data_server.decode()#os.popen("{}".format(data_server.decode())).read() # 將執行命令的結果儲存返回 + # 返回結果 + #conn.send(res.encode('utf-8')) + conn.close() + res = data_server.decode() + enter_label.configure(text=res) + print(res) + #time.sleep(1) + break + break + def begin_game_server(self): + window = self.window + #game begin + client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + client.connect((res_ip, int(res))) # 服務端ip和埠 + enter_label.configure(text="正在等待連線....") + print("正在等待連線....") + msg = str(ans)#input('>>:')#.strip() + + client.send(msg.encode('utf-8')) + time.sleep(1.5) + + while True: + + enter_label.configure(text="已連線") + print("已連線") + msg = '開始遊戲'#input('>>:')#.strip() + if len(msg) == 0: + continue + client.send(msg.encode('utf-8')) + time.sleep(1.5) + #client.send(str(ans).encode('utf-8')) + #ans = 0 + data = client.recv(1024) # 1024位元組的資料 + + ans = int(data.decode()) + #print(ans) + #print(ranges) + #client.close() + time.sleep(0.5) + msg = '1' + client.send(msg.encode('utf-8')) + + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + print(bool(res_boolen)) + if bool(res_boolen): + client.send(" ".encode('utf-8')) + data = client.recv(1024) # 1024位元組的資料 + #ans = int(data.decode()) + res_boolen = data.decode() + if bool(res_boolen): + + break + i = 0 + #guest = random.randint(low, high) + + enter_label.pack_forget() + def warning(self): + import tkinter.messagebox as msg + msg.showwarning(title="socket-game-client_2P",message="請輸入終極數字密碼") + def load(self): + window = self.window + top_frame = tk.Frame(window) + + top_frame.forget() + # 將元件分為 top/bottom 兩群並加入主視窗 + top_frame.pack() + result_label = tk.Label(top_frame) + result_label.pack() + + enter_label = tk.Label(window) + enter_label.pack() + + self.top_frame = top_frame + self.result_label = result_label + + self.enter_label = enter_label + + self.main() + def main(self): + if not self.setup_game_server(): + return + self.server() + self.begin_game_server() + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.window = tk.Toplevel(self) + #self.windows = self.window + self.window.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 + self.load() + #self.main() + #server function ctrl_s_ser_2() + +#m = "" + +setting_var = """ +#state = False +#global mode +#global setting_state +#mode = m +varMode = "client" +var = tk.StringVar() +#varC = tk.StringVar() +#varS = tk.StringVar() +""" + +setting_frame = """ +client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) +server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) +""" + +setting_pack = """ +self.client_radiobtn.pack_forget() +self.client_radiobtn.pack() +self.server_radiobtn.pack_forget() +self.server_radiobtn.pack() +""" + +class setting: + m = "" + """ + exec(setting_var) + exec(setting_frame) + """ + #state = False + #global mode + #global setting_state + #mode = m + varMode = "client" + var = tk.StringVar() + #varC = tk.StringVar() + #varS = tk.StringVar() + + client_radiobtn = tk.Radiobutton(window, text='Client', + variable=var, + value="client"#, offvalue=None + ,command=var.set(varMode)) + server_radiobtn = tk.Radiobutton(window, text='Server', + variable=var, + value="server"#, offvalue=None + ,command=var.set(varMode)) + + def sets(self): + + #if self.m is str: + #self.m = mode + #print(self.varC.get(),self.varS.get()) + self.m = self.var.get() + """ + if self.varC.get() == "client": + self.varS.set(None) + self.m = "client" + if self.varS.get() == "server": + self.varC.set(None) + self.m = "server" + """ + """ + elif mode is int: + if self.varC.get() == 1: + self.varS.set(0) + self.m = "client" + if self.varS.get() == 1: + self.varC.set(0) + self.m = "server" + return self.m + """ + #self.client_checkbtn.pack_forget() + #self.server_checkbtn.pack_forget() + #mode = self.m + #print(mode) + window.title("setting:socket-game-%s_2P"%(self.m)) + return self.m + + def __init__(self): + """ + #self.state = setting_state + if self.state: + return + setting_state = True + """ + #exec(setting_pack) + self.client_radiobtn.pack_forget() + self.client_radiobtn.pack() + self.server_radiobtn.pack_forget() + self.server_radiobtn.pack() + +class main: + m = "" + """ + varC = tk.IntVar() + varS = tk.IntVar() + def setting(self): + + client_checkbtn = tk.Checkbutton(window, text='Client', + variable=self.varC, + onvalue=1, offvalue=0) + #,command=self.sets("")) + client_checkbtn.pack() + server_checkbtn = tk.Checkbutton(window, text='Server', + variable=self.varS, + onvalue=1, offvalue=0) + #,command=self.sets("")) + server_checkbtn.pack() + """ + def M_client(self): + #self.m = mode + #self.m = "client" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("client") + client(window) + def M_server(self): + #elf.m = mode + #self.m = "server" + """ + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + pass + """ + setup("server") + server(window) + def __init__(self): + """ + mode => "client" & "server" . + """ + """ + if not mode == None: + pass + #__main__() + else: + #mode = self.sets(-1) + #mode = self.m + if self.varC.get() == "client": + self.varS.set(None) + mode = "client" + if self.varS.get() == "server": + self.varC.set(None) + mode = "server" + print(mode) + """ + #__main__() + if not main_state: + __main__() + #window.mainloop() + s = setting().sets() + + #self.m = setting.m + mode = s + print(mode) + self.m = mode + if self.m == "client": + self.M_client() + elif self.m == "server": + self.M_server() + else: + window.mainloop() + +def _exit(): + global window + if main_state: + window.destroy() + exit() + +def __init__(): + t = [] + t.append(threading.Thread(target = __main__())) + t.append(threading.Thread(target = window.mainloop())) + + for th in range(len(t)): + t[th].start() + if th == 0: + continue + #while _cheakUpdate(): + t[th].join() + if th <= len(t): + th += 1 + +window.title("menu:socket-selet") +# https://www.796t.com/post/MjNnYW8=.html +if __name__ == '__main__': + main_state = True + __init__() + #__main__() + #window.mainloop() \ No newline at end of file diff --git a/pythonController-autoUpdate/test_cheakV1.4.4(1).py b/pythonController-autoUpdate/test_cheakV1.4.4(1).py new file mode 100644 index 0000000..fcce508 --- /dev/null +++ b/pythonController-autoUpdate/test_cheakV1.4.4(1).py @@ -0,0 +1,4 @@ +from cheakfileV1_4_4 import cheakFile +path = input("file from_path") +path1 =input("file correspond_path") +print("path:",cheakFile(path,path1,mode = "path")) diff --git a/pythonController-autoUpdate/test_cheakV1.5.7test(1).py b/pythonController-autoUpdate/test_cheakV1.5.7test(1).py new file mode 100644 index 0000000..3f37e8b --- /dev/null +++ b/pythonController-autoUpdate/test_cheakV1.5.7test(1).py @@ -0,0 +1,4 @@ +from cheakfileV1_5_7test import cheakFile +path = input("file from_path") +path1 = input("file correspond_path") +print("path:",cheakFile(path,path1,mode = "path")) diff --git a/pythonController-autoUpdate/webDownloader-beta2.11.10.py b/pythonController-autoUpdate/webDownloader-beta2.11.10.py new file mode 100644 index 0000000..6f0c17c --- /dev/null +++ b/pythonController-autoUpdate/webDownloader-beta2.11.10.py @@ -0,0 +1,390 @@ +import os,site +import time +import sys +#import urllib #urllib2.urlopen + +if sys.version_info >= (3, 0): + import urllib +else: + # Import urllib2 to catch errors + import urllib2 + +import requests + +import threading + +from tkinter import * +from tkinter.ttk import * +import tkinter.messagebox + +from cheakfileV1_5_7 import * #cheakFile,replaceFile + +root = Tk() +root.title("cheakUpdate") +with open("unicorn", "rb") as ico: + with open("unicorn.ico", "wb") as icof: + icof.write(ico.read()) +try: + root.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 +except IOError as e: + try: + root.iconbitmap('unicorn') # 更改左上角的icon圖示 + except FileError as e: + print("Can not find the icon") + +_bytes = 0 # 設定初值 +maxbytes = 10000 # 假設下載檔案大小 +state = 0 +count = 0 +i = 0 +lenght = 0 + +th = [] +t = [] + +main_state = None +fn = None +data = """\ +https://github.com/sam-teng/update-data/archive/refs/heads/main.zip, +""" + +""", +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py, +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-server_2P-GUIv2.py, +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/view.py + +""" + +if __name__ == '__main__': + main_state = True +else: + main_state = False + +def _exec(): + with open("updatefile.py","rb") as fr: + fr = fr.read() + print(fr) + exec(fr) + +def __main__(): + """ + rl = threading.RLock() + sem = threading.Semaphore(2) + rl.acquire() + sem.acquire() + """ + root.mainloop() + """ + rl.release() + sem.release() + """ + +pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" +pb.pack(padx=10,pady=10) +#pb["value"] = 0 # Prograssbar初始值 +#pb["maximum"] = maxbytes # Prograddbar最大值 + +def load(): # 啟動Prograssbar + """ + pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" + pb.pack(padx=10,pady=10) + """ + pb["value"] = 0 # Prograssbar初始值 + pb["maximum"] = maxbytes # Prograddbar最大值 + + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + + #loading() + +def loading(): # 模擬下載資料 + + if state == 0: + + """ + pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" + pb.pack(padx=10,pady=10) + """ + pb["value"] = 0 # Prograssbar初始值 + pb["maximum"] = maxbytes # Prograddbar最大值 + + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + + + global _bytes + + if maxbytes == 0 or lenght == 0: + _bytes += maxbytes # 模擬每次下載500bytes + pb["value"] = _bytes # 設定指針 + """ + if state == 0: + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + """ + return False + elif _bytes < maxbytes: + _bytes += maxbytes//lenght # 模擬每次下載500bytes + pb["value"] = _bytes # 設定指針 + """ + if state == 0: + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + """ + return False + else: + packageFile(mode="path").main() + #cleanFile() + tkinter.messagebox.showinfo("showinfo", "更新完成") + root.destroy() + return True + if main_state: + exit() + +def preview(): + global lenght + i = 0 + if fn == None: + if len(list(data)) == 0: + yt_urls = input("enter your file's full url") + else: + yt_urls = data + yt_urls = yt_urls.split(",") + for yt_url in yt_urls: + i += 1 + if yt_url == "": + yt_url = "https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py" + if not "http" in yt_url: + lenght += 1 + continue + lenght = i - lenght + maxbytes = lenght + +def downloads(): + global i + global lenght + # ------ + #import zipfile #zipfile.ZipFile + if fn == None: + if len(list(data)) == 0: + yt_urls = input("enter your file's full url") + else: + yt_urls = data + yt_urls = yt_urls.split(",") + #i = 0 + yt_title = [] + #print("wget is on path %s" % (wget.__file__)) + for yt_url in yt_urls: + + if yt_url == "": + #yt_url = "https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py" + continue + if not "http" in yt_url: + continue + try: + url = yt_url + r = requests.get(url, auth=('user', 'pass'))#https://api.github.com + print(r.status_code) + print(r.headers['content-type']) + + response = requests.get(f'{url}') + print(response) + + + ''' + file_size = os.path.getsize(response.content) + print('File Size:', file_size, 'bytes') + + #time.sleep(0.5) + + """ + filesize = 0 + with open(file_r_path, "rb")as f: + my_bytes = f.read() + my_bytes_array.append(my_bytes) + filesize = 1 + print(my_bytes[0:file_size]) + print(filesize) + """ + file_start_size = (file_size//100)*100 + file_end_size = file_size-file_start_size + """ + with open(""+file_r_path, "rb") as f: + my_bytes = f.read() + """ + my_bytes = response.content + """ + if bool(input("continue bin bytes?")): + #試試看:跟剛才的版本,看到的my_bytes前一百項,有什麼不同? + """ + for i in range(0,file_start_size,100): + print(my_bytes[i+0:i+100]) + print("\n") + time.sleep(0.03) + ii = i + time.sleep(2) + for i in range(ii,file_end_size): + print(my_bytes[i+0:i+100]) + print("\n") + time.sleep(0.03) + print("-==-"*30) + print("file_size",file_size,"\n") + """ + """ + ''' + + test_file_name = str(i)#+".zip" + + pw = "" + with open(test_file_name, 'wb') as file: + #th4.start() + pw = id(file) + file.write(response.content) + file.close() + + import random + pw = bytes((str(pw) + str(pw+random.randint(-pw,pw))).encode("UTF-8")) + + """ + req = urllib.request(url) + downloadurl = urllib.urlopen(req) + zipcontent = downloadurl.read() + with open("%d.py"%(i), 'wb') as f:#with open("%d."+input("請輸入副檔名")%(i), 'wb') as f: + f.write(zipcontent) + """ + """ + w = wget.download(url,out="\\"+str(i)+".zip") + """ + + from zipfile import ZipFile + + try: + import pyminizip + src = None # "..." + compression_level = 5 # 1‑9 + pyminizip.compress(test_file_name, src, test_file_name, pw, compression_level) + except: + with ZipFile(test_file_name, 'a') as Zip: + Zip.setpassword(pw) + Zip.printdir() + + with ZipFile(test_file_name, 'r') as Zip: + Zip.printdir() + Zip.extractall("temp",pwd = pw) + """ + yt = YouTube(yt_url)#YouTube('https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ') + print('strart downloads: ',yt.title) + path = ""#yt.title + #yt_title = yt_title.join(yt.title) + yt_title.append(yt.title) + """ + """ + if not os.path.exists(path): + os.makedirs(path) + """ + #print(type(yt)) + """ + yt.streams.filter(subtype='mp4').first().download(path)# + print('finish',yt.title,'downloads!') + """ + + #exec(open("cheakfile.py").read()) + + except Exception as e: + print(e,"can't from " + yt_url + "\t download file") + tkinter.messagebox.showinfo("showinfo", "第"+str(i+1)+"項"+"更新失敗") + if i+1 == lenght: + root.destroy() + if main_state: + exit() + #yt_title.remove(yt.title) + finally: + i = i + 1 + time.sleep(3) + + else: + pass + if not loading(): + downloads() + else: + #root.destroy() + if main_state: + exit() + pass + +def state(): + global count + if _bytes >= maxbytes: + count += 1 + +def cheakstate(): + if count == 0: + pass#count += 1 + elif count == 1: + tkinter.messagebox.showinfo("showinfo", "更新完成") + + time.sleep(1) + + elif count == 2: + + time.sleep(1.5) + """ + #th.join() + #th0.join() + th1.join() + th3.join() + th4.join() + #th5.join() + th2.join() + """ + + for ths in range(len(th)): + th[ths].join() + if main_state: + exit() + +def __init__(): + #t = [main(),state(),preview(),load(),downloads(),cheakstate()] + """ + th = threading.Thread(target = preview()) + #th0 = threading.Thread(target = _exec()) + th1 = threading.Thread(target = downloads()) + #load() + th2 = threading.Thread(target = main()) + #root.mainloop() + th3 = threading.Thread(target = state()) + #count += 1 + th4 = threading.Thread(target = load()) + #cheakstate() + + th5 = threading.Thread(target = cheakstate()) + """ + ths = 0 + + for ts in t: + th.append(threading.Thread(target = ts)) + th[ths].start() + ths += 1 + """ +#load() +#downloads() +#cheakstate() + th2.start() + + th3.start() + th.start() + th.join() + th4.start()#->move into downloads. + th1.start() + #th0.start() + th5.start() + """ + +tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + +t = [state(),preview(),load(),downloads(),cheakstate()]#,main()] +""" +if __name__ == '__main__': + __init__() + __main__() +""" \ No newline at end of file diff --git a/pythonController-autoUpdate/webDownloader-beta2.11.8.py b/pythonController-autoUpdate/webDownloader-beta2.11.8.py new file mode 100644 index 0000000..5959e97 --- /dev/null +++ b/pythonController-autoUpdate/webDownloader-beta2.11.8.py @@ -0,0 +1,390 @@ +import os,site +import time +import sys +#import urllib #urllib2.urlopen + +if sys.version_info >= (3, 0): + import urllib +else: + # Import urllib2 to catch errors + import urllib2 + +import requests + +import threading + +from tkinter import * +from tkinter.ttk import * +import tkinter.messagebox + +from cheakfileV1_5_5 import * #cheakFile,replaceFile + +root = Tk() +root.title("cheakUpdate") +with open("unicorn", "rb") as ico: + with open("unicorn.ico", "wb") as icof: + icof.write(ico.read()) +try: + root.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 +except IOError as e: + try: + root.iconbitmap('unicorn') # 更改左上角的icon圖示 + except FileError as e: + print("Can not find the icon") + +_bytes = 0 # 設定初值 +maxbytes = 10000 # 假設下載檔案大小 +state = 0 +count = 0 +i = 0 +lenght = 0 + +th = [] +t = [] + +main_state = None +fn = None +data = """\ +https://github.com/sam-teng/update-data/archive/refs/heads/main.zip, +""" + +""", +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py, +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-server_2P-GUIv2.py, +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/view.py + +""" + +if __name__ == '__main__': + main_state = True +else: + main_state = False + +def _exec(): + with open("updatefile.py","rb") as fr: + fr = fr.read() + print(fr) + exec(fr) + +def __main__(): + """ + rl = threading.RLock() + sem = threading.Semaphore(2) + rl.acquire() + sem.acquire() + """ + root.mainloop() + """ + rl.release() + sem.release() + """ + +pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" +pb.pack(padx=10,pady=10) +#pb["value"] = 0 # Prograssbar初始值 +#pb["maximum"] = maxbytes # Prograddbar最大值 + +def load(): # 啟動Prograssbar + """ + pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" + pb.pack(padx=10,pady=10) + """ + pb["value"] = 0 # Prograssbar初始值 + pb["maximum"] = maxbytes # Prograddbar最大值 + + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + + #loading() + +def loading(): # 模擬下載資料 + + if state == 0: + + """ + pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" + pb.pack(padx=10,pady=10) + """ + pb["value"] = 0 # Prograssbar初始值 + pb["maximum"] = maxbytes # Prograddbar最大值 + + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + + + global _bytes + + if maxbytes == 0 or lenght == 0: + _bytes += maxbytes # 模擬每次下載500bytes + pb["value"] = _bytes # 設定指針 + """ + if state == 0: + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + """ + return False + elif _bytes < maxbytes: + _bytes += maxbytes//lenght # 模擬每次下載500bytes + pb["value"] = _bytes # 設定指針 + """ + if state == 0: + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + """ + return False + else: + packageFile(mode="path").main() + #cleanFile() + tkinter.messagebox.showinfo("showinfo", "更新完成") + root.destroy() + return True + if main_state: + exit() + +def preview(): + global lenght + i = 0 + if fn == None: + if len(list(data)) == 0: + yt_urls = input("enter your file's full url") + else: + yt_urls = data + yt_urls = yt_urls.split(",") + for yt_url in yt_urls: + i += 1 + if yt_url == "": + yt_url = "https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py" + if not "http" in yt_url: + lenght += 1 + continue + lenght = i - lenght + maxbytes = lenght + +def downloads(): + global i + global lenght + # ------ + #import zipfile #zipfile.ZipFile + if fn == None: + if len(list(data)) == 0: + yt_urls = input("enter your file's full url") + else: + yt_urls = data + yt_urls = yt_urls.split(",") + #i = 0 + yt_title = [] + #print("wget is on path %s" % (wget.__file__)) + for yt_url in yt_urls: + + if yt_url == "": + #yt_url = "https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py" + continue + if not "http" in yt_url: + continue + try: + url = yt_url + r = requests.get(url, auth=('user', 'pass'))#https://api.github.com + print(r.status_code) + print(r.headers['content-type']) + + response = requests.get(f'{url}') + print(response) + + + ''' + file_size = os.path.getsize(response.content) + print('File Size:', file_size, 'bytes') + + #time.sleep(0.5) + + """ + filesize = 0 + with open(file_r_path, "rb")as f: + my_bytes = f.read() + my_bytes_array.append(my_bytes) + filesize = 1 + print(my_bytes[0:file_size]) + print(filesize) + """ + file_start_size = (file_size//100)*100 + file_end_size = file_size-file_start_size + """ + with open(""+file_r_path, "rb") as f: + my_bytes = f.read() + """ + my_bytes = response.content + """ + if bool(input("continue bin bytes?")): + #試試看:跟剛才的版本,看到的my_bytes前一百項,有什麼不同? + """ + for i in range(0,file_start_size,100): + print(my_bytes[i+0:i+100]) + print("\n") + time.sleep(0.03) + ii = i + time.sleep(2) + for i in range(ii,file_end_size): + print(my_bytes[i+0:i+100]) + print("\n") + time.sleep(0.03) + print("-==-"*30) + print("file_size",file_size,"\n") + """ + """ + ''' + + test_file_name = str(i)#+".zip" + + pw = "" + with open(test_file_name, 'wb') as file: + #th4.start() + pw = id(file) + file.write(response.content) + file.close() + + import random + pw = bytes((str(pw) + str(pw+random.randint(-pw,pw))).encode("UTF-8")) + + """ + req = urllib.request(url) + downloadurl = urllib.urlopen(req) + zipcontent = downloadurl.read() + with open("%d.py"%(i), 'wb') as f:#with open("%d."+input("請輸入副檔名")%(i), 'wb') as f: + f.write(zipcontent) + """ + """ + w = wget.download(url,out="\\"+str(i)+".zip") + """ + + from zipfile import ZipFile + + try: + import pyminizip + src = None # "..." + compression_level = 5 # 1‑9 + pyminizip.compress(test_file_name, src, test_file_name, pw, compression_level) + except: + with ZipFile(test_file_name, 'a') as Zip: + Zip.setpassword(pw) + Zip.printdir() + + with ZipFile(test_file_name, 'r') as Zip: + Zip.printdir() + Zip.extractall("temp",pwd = pw) + """ + yt = YouTube(yt_url)#YouTube('https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ') + print('strart downloads: ',yt.title) + path = ""#yt.title + #yt_title = yt_title.join(yt.title) + yt_title.append(yt.title) + """ + """ + if not os.path.exists(path): + os.makedirs(path) + """ + #print(type(yt)) + """ + yt.streams.filter(subtype='mp4').first().download(path)# + print('finish',yt.title,'downloads!') + """ + + #exec(open("cheakfile.py").read()) + + except Exception as e: + print(e,"can't from " + yt_url + "\t download file") + tkinter.messagebox.showinfo("showinfo", "第"+str(i+1)+"項"+"更新失敗") + if i+1 == lenght: + root.destroy() + if main_state: + exit() + #yt_title.remove(yt.title) + finally: + i = i + 1 + time.sleep(3) + + else: + pass + if not loading(): + downloads() + else: + #root.destroy() + if main_state: + exit() + pass + +def state(): + global count + if _bytes >= maxbytes: + count += 1 + +def cheakstate(): + if count == 0: + pass#count += 1 + elif count == 1: + tkinter.messagebox.showinfo("showinfo", "更新完成") + + time.sleep(1) + + elif count == 2: + + time.sleep(1.5) + """ + #th.join() + #th0.join() + th1.join() + th3.join() + th4.join() + #th5.join() + th2.join() + """ + + for ths in range(len(th)): + th[ths].join() + if main_state: + exit() + +def __init__(): + #t = [main(),state(),preview(),load(),downloads(),cheakstate()] + """ + th = threading.Thread(target = preview()) + #th0 = threading.Thread(target = _exec()) + th1 = threading.Thread(target = downloads()) + #load() + th2 = threading.Thread(target = main()) + #root.mainloop() + th3 = threading.Thread(target = state()) + #count += 1 + th4 = threading.Thread(target = load()) + #cheakstate() + + th5 = threading.Thread(target = cheakstate()) + """ + ths = 0 + + for ts in t: + th.append(threading.Thread(target = ts)) + th[ths].start() + ths += 1 + """ +#load() +#downloads() +#cheakstate() + th2.start() + + th3.start() + th.start() + th.join() + th4.start()#->move into downloads. + th1.start() + #th0.start() + th5.start() + """ + +tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + +t = [state(),preview(),load(),downloads(),cheakstate()]#,main()] +""" +if __name__ == '__main__': + __init__() + __main__() +""" \ No newline at end of file diff --git a/pythonController-autoUpdate/webDownloader-beta2.11.9.py b/pythonController-autoUpdate/webDownloader-beta2.11.9.py new file mode 100644 index 0000000..d7556bb --- /dev/null +++ b/pythonController-autoUpdate/webDownloader-beta2.11.9.py @@ -0,0 +1,390 @@ +import os,site +import time +import sys +#import urllib #urllib2.urlopen + +if sys.version_info >= (3, 0): + import urllib +else: + # Import urllib2 to catch errors + import urllib2 + +import requests + +import threading + +from tkinter import * +from tkinter.ttk import * +import tkinter.messagebox + +from cheakfileV1_5_6 import * #cheakFile,replaceFile + +root = Tk() +root.title("cheakUpdate") +with open("unicorn", "rb") as ico: + with open("unicorn.ico", "wb") as icof: + icof.write(ico.read()) +try: + root.iconbitmap('unicorn.ico') # 更改左上角的icon圖示 +except IOError as e: + try: + root.iconbitmap('unicorn') # 更改左上角的icon圖示 + except FileError as e: + print("Can not find the icon") + +_bytes = 0 # 設定初值 +maxbytes = 10000 # 假設下載檔案大小 +state = 0 +count = 0 +i = 0 +lenght = 0 + +th = [] +t = [] + +main_state = None +fn = None +data = """\ +https://github.com/sam-teng/update-data/archive/refs/heads/main.zip, +""" + +""", +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py, +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-server_2P-GUIv2.py, +https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/view.py + +""" + +if __name__ == '__main__': + main_state = True +else: + main_state = False + +def _exec(): + with open("updatefile.py","rb") as fr: + fr = fr.read() + print(fr) + exec(fr) + +def __main__(): + """ + rl = threading.RLock() + sem = threading.Semaphore(2) + rl.acquire() + sem.acquire() + """ + root.mainloop() + """ + rl.release() + sem.release() + """ + +pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" +pb.pack(padx=10,pady=10) +#pb["value"] = 0 # Prograssbar初始值 +#pb["maximum"] = maxbytes # Prograddbar最大值 + +def load(): # 啟動Prograssbar + """ + pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" + pb.pack(padx=10,pady=10) + """ + pb["value"] = 0 # Prograssbar初始值 + pb["maximum"] = maxbytes # Prograddbar最大值 + + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + + #loading() + +def loading(): # 模擬下載資料 + + if state == 0: + + """ + pb = Progressbar(root,length=200,mode="determinate",orient=HORIZONTAL)#mode="indeterminate" + pb.pack(padx=10,pady=10) + """ + pb["value"] = 0 # Prograssbar初始值 + pb["maximum"] = maxbytes # Prograddbar最大值 + + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + + + global _bytes + + if maxbytes == 0 or lenght == 0: + _bytes += maxbytes # 模擬每次下載500bytes + pb["value"] = _bytes # 設定指針 + """ + if state == 0: + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + """ + return False + elif _bytes < maxbytes: + _bytes += maxbytes//lenght # 模擬每次下載500bytes + pb["value"] = _bytes # 設定指針 + """ + if state == 0: + t.append(threading.Thread(target = pb.after(50,loading))) + # 經過0.05秒繼續執行loading + """ + return False + else: + packageFile(mode="path").main() + #cleanFile() + tkinter.messagebox.showinfo("showinfo", "更新完成") + root.destroy() + return True + if main_state: + exit() + +def preview(): + global lenght + i = 0 + if fn == None: + if len(list(data)) == 0: + yt_urls = input("enter your file's full url") + else: + yt_urls = data + yt_urls = yt_urls.split(",") + for yt_url in yt_urls: + i += 1 + if yt_url == "": + yt_url = "https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py" + if not "http" in yt_url: + lenght += 1 + continue + lenght = i - lenght + maxbytes = lenght + +def downloads(): + global i + global lenght + # ------ + #import zipfile #zipfile.ZipFile + if fn == None: + if len(list(data)) == 0: + yt_urls = input("enter your file's full url") + else: + yt_urls = data + yt_urls = yt_urls.split(",") + #i = 0 + yt_title = [] + #print("wget is on path %s" % (wget.__file__)) + for yt_url in yt_urls: + + if yt_url == "": + #yt_url = "https://github.com/sam-teng/update-data/blob/main/pythonGame-autoUpdate/game_socket-client_2P-GUIv2.py" + continue + if not "http" in yt_url: + continue + try: + url = yt_url + r = requests.get(url, auth=('user', 'pass'))#https://api.github.com + print(r.status_code) + print(r.headers['content-type']) + + response = requests.get(f'{url}') + print(response) + + + ''' + file_size = os.path.getsize(response.content) + print('File Size:', file_size, 'bytes') + + #time.sleep(0.5) + + """ + filesize = 0 + with open(file_r_path, "rb")as f: + my_bytes = f.read() + my_bytes_array.append(my_bytes) + filesize = 1 + print(my_bytes[0:file_size]) + print(filesize) + """ + file_start_size = (file_size//100)*100 + file_end_size = file_size-file_start_size + """ + with open(""+file_r_path, "rb") as f: + my_bytes = f.read() + """ + my_bytes = response.content + """ + if bool(input("continue bin bytes?")): + #試試看:跟剛才的版本,看到的my_bytes前一百項,有什麼不同? + """ + for i in range(0,file_start_size,100): + print(my_bytes[i+0:i+100]) + print("\n") + time.sleep(0.03) + ii = i + time.sleep(2) + for i in range(ii,file_end_size): + print(my_bytes[i+0:i+100]) + print("\n") + time.sleep(0.03) + print("-==-"*30) + print("file_size",file_size,"\n") + """ + """ + ''' + + test_file_name = str(i)#+".zip" + + pw = "" + with open(test_file_name, 'wb') as file: + #th4.start() + pw = id(file) + file.write(response.content) + file.close() + + import random + pw = bytes((str(pw) + str(pw+random.randint(-pw,pw))).encode("UTF-8")) + + """ + req = urllib.request(url) + downloadurl = urllib.urlopen(req) + zipcontent = downloadurl.read() + with open("%d.py"%(i), 'wb') as f:#with open("%d."+input("請輸入副檔名")%(i), 'wb') as f: + f.write(zipcontent) + """ + """ + w = wget.download(url,out="\\"+str(i)+".zip") + """ + + from zipfile import ZipFile + + try: + import pyminizip + src = None # "..." + compression_level = 5 # 1‑9 + pyminizip.compress(test_file_name, src, test_file_name, pw, compression_level) + except: + with ZipFile(test_file_name, 'a') as Zip: + Zip.setpassword(pw) + Zip.printdir() + + with ZipFile(test_file_name, 'r') as Zip: + Zip.printdir() + Zip.extractall("temp",pwd = pw) + """ + yt = YouTube(yt_url)#YouTube('https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ') + print('strart downloads: ',yt.title) + path = ""#yt.title + #yt_title = yt_title.join(yt.title) + yt_title.append(yt.title) + """ + """ + if not os.path.exists(path): + os.makedirs(path) + """ + #print(type(yt)) + """ + yt.streams.filter(subtype='mp4').first().download(path)# + print('finish',yt.title,'downloads!') + """ + + #exec(open("cheakfile.py").read()) + + except Exception as e: + print(e,"can't from " + yt_url + "\t download file") + tkinter.messagebox.showinfo("showinfo", "第"+str(i+1)+"項"+"更新失敗") + if i+1 == lenght: + root.destroy() + if main_state: + exit() + #yt_title.remove(yt.title) + finally: + i = i + 1 + time.sleep(3) + + else: + pass + if not loading(): + downloads() + else: + #root.destroy() + if main_state: + exit() + pass + +def state(): + global count + if _bytes >= maxbytes: + count += 1 + +def cheakstate(): + if count == 0: + pass#count += 1 + elif count == 1: + tkinter.messagebox.showinfo("showinfo", "更新完成") + + time.sleep(1) + + elif count == 2: + + time.sleep(1.5) + """ + #th.join() + #th0.join() + th1.join() + th3.join() + th4.join() + #th5.join() + th2.join() + """ + + for ths in range(len(th)): + th[ths].join() + if main_state: + exit() + +def __init__(): + #t = [main(),state(),preview(),load(),downloads(),cheakstate()] + """ + th = threading.Thread(target = preview()) + #th0 = threading.Thread(target = _exec()) + th1 = threading.Thread(target = downloads()) + #load() + th2 = threading.Thread(target = main()) + #root.mainloop() + th3 = threading.Thread(target = state()) + #count += 1 + th4 = threading.Thread(target = load()) + #cheakstate() + + th5 = threading.Thread(target = cheakstate()) + """ + ths = 0 + + for ts in t: + th.append(threading.Thread(target = ts)) + th[ths].start() + ths += 1 + """ +#load() +#downloads() +#cheakstate() + th2.start() + + th3.start() + th.start() + th.join() + th4.start()#->move into downloads. + th1.start() + #th0.start() + th5.start() + """ + +tkinter.messagebox.showinfo("showinfo", "更新中請耐心等候") + +t = [state(),preview(),load(),downloads(),cheakstate()]#,main()] +""" +if __name__ == '__main__': + __init__() + __main__() +""" \ No newline at end of file