Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.20 KB | None | 0 0
  1. import os
  2. import random
  3. import time
  4. import sys
  5. import math
  6.  
  7. xsize = 80
  8. ysize = 20
  9. vram=[]
  10. progs=['help','menu','tp','notepad', 'resize', 'suicide','loading','calculator']
  11.  
  12.  
  13. def setup_window():                                                          # размер окна консоли
  14.     global xsize
  15.     global ysize
  16.     os.system("mode con cols={} lines={}".format(xsize,ysize+1))
  17.  
  18.  
  19. setup_window()                             # задание размеров окна консоли
  20.  
  21.  
  22. def screen_cls():                          # очистка экрана (предотвращат мигание)
  23.     os.system("cls")
  24.  
  25.  
  26. def vram_clear():                          # чистая видеопамять
  27.     global ysize
  28.     global xsize
  29.     global vram
  30.     vram=[]
  31.  
  32.     for i in range(xsize*ysize):
  33.         vram.append([' '])
  34.  
  35.  
  36. vram_clear()                                                                 # инициализация "видеопамяти" при запуске
  37.  
  38.  
  39. def render():                                                                # рендер переданной видепамяти
  40.     global vram
  41.     global xsize
  42.     global ysize
  43.  
  44.     for i in range(len(vram)):                                               # алгоритм рендера
  45.         if i%xsize==0:  print(vram[i][0], sep='')
  46.         else:           print(vram[i][0], end='', sep='')
  47.  
  48.  
  49. def vin(char,x,y):                    # функция доступа к знакомесатм по координатам
  50.     global vram
  51.     global xsize
  52.     ind = y * xsize + x+1                # вычисление смещения знакоместа
  53.  
  54.     vram[ind][0]=char             # запись значения в знакоместо
  55.     #return vram                  # археологи говорят, что это когда-то было нужно
  56.  
  57.  
  58. def draw_arr(arr):                                                           # оцтань от этого, потом переделаешь
  59.     for i in range(len(arr)):
  60.         vin('8',i,arr[i])
  61.         for j in range(0,arr[i]):
  62.             vin('|', i, j)
  63.     render()
  64.  
  65.  
  66. def vin_string(word, x, y):
  67.     for i in range(len(word)):
  68.         vin(word[i],x+i,y)
  69.  
  70.  
  71. def tp():
  72.     global xsize
  73.     global ysize
  74.     vram_clear()
  75.     word = 'ti pidor'
  76.     for i in range(len(word)):
  77.         vin(word[i], i, 1)  # записть word в видепамять со 4 элемента 2 строки
  78.     for i in range(xsize):
  79.         vin('_', i, 0)
  80.     render()
  81.     cin()
  82.  
  83.  
  84. def help():
  85.     global xsize
  86.     global ysize
  87.     vram_clear()
  88.  
  89.     vin_string('ширина окна - {} знакомест'.format(xsize), 0, 0)
  90.     vin_string('высота окна - {} знакомест'.format(ysize), 0, 1)
  91.     vin_string('_'*xsize, 0, 2)
  92.  
  93.  
  94.     render()
  95.     cin()
  96.  
  97.  
  98. def menu():
  99.     global xsize
  100.     global ysize
  101.     global progs
  102.     vram_clear()
  103.     render()
  104.  
  105.     vin_string('PythonOs v0.001|', 0, 0)
  106.     vin_string('͞' * xsize, 0, 1)
  107.  
  108.     vin_string('aviable programs: ',1,2)
  109.     for i in range(len(progs)):
  110.         vin_string('- '+progs[i], 0, 3+i)
  111.  
  112.     render()
  113.     cin()
  114.  
  115.  
  116. def notepad():
  117.     global xsize
  118.     global ysize
  119.  
  120.     vram_clear()
  121.     vin_string('PythonOs NotePad v0.0001', 0, 0)
  122.     vin_string('͞' * xsize, 0, 1)
  123.     for i in range(2,ysize-2):
  124.         b=str(i-1)
  125.         if len(b)<2:
  126.             b+=' '
  127.         vin_string(b+':', 0, i)
  128.     render()
  129.     inp = ''
  130.     count=2;
  131.  
  132.     while True:
  133.         print()
  134.         inp = input()
  135.         render()
  136.         if inp == 'close' or inp == 'exit' or inp == 'quit' or inp=='menu':
  137.             break
  138.         elif inp == 'clear':
  139.             notepad()
  140.         else:
  141.             vin_string(inp,3,count)
  142.             render()
  143.             count+=1;
  144.             if count == ysize - 2:
  145.                 count = 2;
  146.     menu()
  147.  
  148.  
  149. def loading():
  150.     vram_clear()
  151.     vin_string('͞' * xsize, 0, 4)
  152.     vin_string('͞' * xsize, 0, 13)
  153.     vin_string(' '*(xsize//2-len('PythonOS')//2)+'PythonOS', 0, 15)
  154.     render()
  155.     for i in range(xsize):
  156.         #vin('=',i,16)
  157.         time.sleep(random.randint(5,10)/100)
  158.         vin('0',i,8+int(math.sin(i/2)*4))
  159.         render()
  160.     menu()
  161.  
  162.  
  163. def calculator():
  164.     global xsize
  165.     global ysize
  166.     vram_clear()
  167.     vin_string('Calculator v0.1', 0, 0)
  168.     vin_string('͞' * xsize, 0, 1)
  169.     render()
  170.     c = 2;
  171.     while True:
  172.         print()
  173.         inp = input()
  174.         render()
  175.         if inp=='exit' or inp=='menu' or inp=='quit':
  176.             break
  177.         else:
  178.             try:
  179.                 res = eval(inp)
  180.                 vin_string(' '*xsize,0, c)
  181.                 vin_string(inp+' = '+str(res),1, c)
  182.                 c+=1
  183.                 vin_string('     ', xsize - len('error'), 2)
  184.                 if c==ysize-2:
  185.                     c=2;
  186.                 render()
  187.             except:
  188.                 vin_string('error', xsize - len('error'), 2)
  189.                 render()
  190.     menu()
  191.  
  192. def resize():
  193.     global xsize
  194.     global ysize
  195.     vram_clear()
  196.     screen_cls()
  197.     vin_string('input size "CC LL"',1,1)
  198.  
  199.     vin_string('LL - ysize', 1, 2)
  200.     vin_string('CC - xsize', 1, 3)
  201.     vin_string(str(xsize), xsize // 2,0)
  202.     vin_string(str(ysize), xsize-3, ysize//2)
  203.     render()
  204.     print()
  205.     inp = input()
  206.     inp = inp.split()
  207.     vin_string('{} cols and {} lines'.format(inp[0],inp[1]), 0, ysize//2-1)
  208.     vin_string(inp[0], xsize // 2,0)
  209.     vin_string(inp[1], xsize-3, ysize//2)
  210.  
  211.     render()
  212.     print()
  213.     input()
  214.     xsize = int(inp[0])
  215.     ysize = int(inp[1])
  216.     vram_clear()
  217.     setup_window()
  218.     menu()
  219.  
  220.  
  221. def suicide():
  222.     global vram
  223.     c=0
  224.     while True:
  225.         vram[c][0]=chr(c)
  226.         c+=1
  227.         render()
  228.  
  229.  
  230. def cin():
  231.     global progs
  232.     global xsize
  233.     global ysize
  234.     global progs
  235.     inp = ''
  236.  
  237.     while not inp:
  238.         print()
  239.         inp = input()
  240.         render()
  241.  
  242.     if inp in progs:
  243.         exec('{}()'.format(inp))
  244.     else:
  245.         vin_string('error', 2, ysize-2)
  246.         render()
  247.         cin()
  248.  
  249.  
  250.  
  251. def main():
  252.     global xsize
  253.     global ysize
  254.     global vram
  255.     #loading()
  256.     menu()
  257.  
  258.  
  259. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement