Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #By Mr.A AKA A-MAN (c)2012-2013
- #All rights reserved
- #The A-Wave Simulator
- #Feel free to use any part of this code, but don't claim as your own.
- import pygame
- from pygame.locals import *
- import time, math, sys
- #Wave propertiess:
- AMPLITUDE = 130
- FREQUENCY = 2
- WAVELENGTH= 114
- AMPLITUDE2= 0
- FREQUENCY2= 2
- WAVELENGTH2= 114
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- #end
- INTERFERE = False
- DEFLECT = False
- LONGITUDINAL=False
- COHERENTIZE = False
- SHOW_B = False
- LONGITUDINALheight = 100
- NOOFLONGILINES = 70
- FPS = 100
- FPS_CLOCK = pygame.time.Clock()
- pygame.init()
- pygame.mouse.set_cursor(*pygame.cursors.broken_x)
- SCREEN = pygame.display.set_mode((1024, 768), pygame.FULLSCREEN|pygame.HWSURFACE| pygame.DOUBLEBUF)
- pygame.display.set_caption("The A-Wave Simulator")
- FONT = pygame.font.SysFont(None, 20, False, False)
- LARGERFONT = pygame.font.SysFont(None, 30, False, False)
- LARGEFONT = pygame.font.SysFont(None, 60, False, False)
- ERTEXT = LARGEFONT.render("ERROR: THE VELOCITIES OF WAVE <#A> AND", True, (255, 0, 0))
- ERTEXT2 = LARGEFONT.render("WAVE <#B> ARE NOT EQUAL!", True, (255, 0, 0))
- ERTEXTbdy = ERTEXT.get_rect()
- ERTEXT2bdy = ERTEXT2.get_rect()
- ERTEXTbdy.centerx, ERTEXT2bdy.centerx = SCREEN.get_rect().centerx, SCREEN.get_rect().centerx
- ERTEXTbdy.centery, ERTEXT2bdy.centery = SCREEN.get_rect().centery-75, SCREEN.get_rect().centery+75
- L0TEXT= FONT.render("Wave velocity = CONSTANT <1400>", True, (255, 255, 255))
- L0TEXTbdy = L0TEXT.get_rect()
- L0TEXTbdy.left = SCREEN.get_rect().left + 20
- L0TEXTbdy.bottom=SCREEN.get_rect().top + 600
- L1TEXT= LARGERFONT.render("Wave motion as in Wavefronts: ", True, (0, 255, 0))
- L1TEXTbdy = L1TEXT.get_rect()
- L1TEXTbdy.left = SCREEN.get_rect().left + 20
- L1TEXTbdy.bottom=SCREEN.get_rect().top + 200
- L2TEXT= LARGERFONT.render("Wave motion as in Particles: ", True, (0, 255, 0))
- L2TEXTbdy = L2TEXT.get_rect()
- L2TEXTbdy.left = SCREEN.get_rect().left + 20
- L2TEXTbdy.bottom=SCREEN.get_rect().top + 420
- VTEXT= FONT.render("Wave velocity (px/s): ", True, (0, 255, 0))
- VTEXTbdy = VTEXT.get_rect()
- VTEXTbdy.left = SCREEN.get_rect().left + 20
- VTEXTbdy.bottom=SCREEN.get_rect().bottom - 20
- VTEXTbdy2 = pygame.Rect(VTEXTbdy[0]+400, VTEXTbdy[1], VTEXTbdy[2], VTEXTbdy[3])
- FTEXT= FONT.render("Wave Frequency (s^-1): ", True, (0, 255, 0))
- FTEXTbdy = FTEXT.get_rect()
- FTEXTbdy.left = SCREEN.get_rect().left + 20
- FTEXTbdy.bottom=SCREEN.get_rect().bottom - 40
- FTEXTbdy2 = pygame.Rect(FTEXTbdy[0]+400, FTEXTbdy[1], FTEXTbdy[2], FTEXTbdy[3])
- WTEXT= FONT.render("Wave Length (px): ", True, (0, 255, 0))
- WTEXTbdy = WTEXT.get_rect()
- WTEXTbdy.left = SCREEN.get_rect().left + 20
- WTEXTbdy.bottom=SCREEN.get_rect().bottom - 60
- WTEXTbdy2 = pygame.Rect(WTEXTbdy[0]+400, WTEXTbdy[1], WTEXTbdy[2], WTEXTbdy[3])
- ATEXT= FONT.render("Max. Amplitude (px): ", True, (0, 255, 0))
- ATEXTL= FONT.render("Max. Amplitude (px/3): ", True, (0, 255, 0))
- ATEXTbdy = ATEXT.get_rect()
- ATEXTbdy.left = SCREEN.get_rect().left + 20
- ATEXTbdy.bottom=SCREEN.get_rect().bottom - 80
- ATEXTbdy2 = pygame.Rect(ATEXTbdy[0]+400, ATEXTbdy[1], ATEXTbdy[2], ATEXTbdy[3])
- PXTEXT= FONT.render("1 cm ~= 38 px", True, (0, 255, 0))
- PXTEXTbdy = PXTEXT.get_rect()
- PXTEXTbdy.left = SCREEN.get_rect().left + 20
- PXTEXTbdy.top =SCREEN.get_rect().top + 40
- NTEXT= FONT.render("Note: The velocity of the wave can not deceed 100. That is because the FPS of the program is a 100.", True, (0, 255, 0))
- NTEXTbdy = NTEXT.get_rect()
- NTEXTbdy.left = SCREEN.get_rect().left + 20
- NTEXTbdy.top=SCREEN.get_rect().top + 20
- WAVEATEXT= FONT.render("Wave A <#Red>:", True, (255, 0, 0))
- WAVEBTEXT= FONT.render("Wave B <#Blue>:", True, (0, 0, 255))
- WAVEATEXTbdy = WAVEATEXT.get_rect()
- WAVEBTEXTbdy = WAVEBTEXT.get_rect()
- WAVEATEXTbdy = pygame.Rect(ATEXTbdy[0], ATEXTbdy[1]-30, WAVEATEXTbdy[2], WAVEATEXTbdy[3])
- WAVEBTEXTbdy = pygame.Rect(ATEXTbdy2[0], ATEXTbdy[1]-30, WAVEBTEXTbdy[2], WAVEBTEXTbdy[3])
- BTEXT= FONT.render("Display <B>: ", True, (0, 255, 0))
- BTEXTbdy = BTEXT.get_rect()
- BTEXTbdy = pygame.Rect(ATEXTbdy2[0] + 70, ATEXTbdy[1]-30, BTEXTbdy[2], BTEXTbdy[3])
- ITEXT= FONT.render("Allow interference: ", True, (0, 255, 0))
- ITEXTbdy = ITEXT.get_rect()
- ITEXTbdy.right = SCREEN.get_rect().right - 45
- ITEXTbdy.top=SCREEN.get_rect().bottom - 90
- CTEXT= FONT.render("Coherentize waves: ", True, (0, 255, 0))
- CTEXTbdy = CTEXT.get_rect()
- CTEXTbdy.right = SCREEN.get_rect().right - 45
- CTEXTbdy.top=SCREEN.get_rect().bottom - 110
- DTEXT= FONT.render("Allow Reflection: ", True, (0, 255, 0))
- DTEXTbdy = DTEXT.get_rect()
- DTEXTbdy.right = SCREEN.get_rect().right - 45
- DTEXTbdy.top=SCREEN.get_rect().bottom - 70
- LTEXT= FONT.render("Show in Longitudianl Form: ", True, (0, 255, 0))
- LTEXTbdy = LTEXT.get_rect()
- LTEXTbdy.right = SCREEN.get_rect().right - 45
- LTEXTbdy.top=SCREEN.get_rect().bottom - 50
- RTEXT= FONT.render("Reset All: ", True, (0, 255, 0))
- RTEXTbdy = RTEXT.get_rect()
- RTEXTbdy.right = SCREEN.get_rect().right - 95
- RTEXTbdy.top=SCREEN.get_rect().top + 20
- R2TEXT= FONT.render("Reset Screen: ", True, (0, 255, 0))
- R2TEXTbdy = R2TEXT.get_rect()
- R2TEXTbdy.right = SCREEN.get_rect().right - 45
- R2TEXTbdy.top=SCREEN.get_rect().bottom - 30
- BUTTONBDYS = []
- BUTTONBDYS.append((ATEXTbdy[0]+250,ATEXTbdy[1], 12, 12))
- BUTTONBDYS.append((ATEXTbdy[0]+250+17,ATEXTbdy[1], 12, 12))
- BUTTONBDYS.append((ATEXTbdy[0]+250+17+17,ATEXTbdy[1], 24, 12))
- BUTTONBDYS.append((ATEXTbdy[0]+250+17+17+29,ATEXTbdy[1], 24, 12))
- BUTTONBDYS.append((WTEXTbdy[0]+250,WTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((WTEXTbdy[0]+250+17,WTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((WTEXTbdy[0]+250+17+17,WTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((WTEXTbdy[0]+250+17+17+29,WTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((FTEXTbdy[0]+250,FTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((FTEXTbdy[0]+250+17,FTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((FTEXTbdy[0]+250+17+17,FTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((FTEXTbdy[0]+250+17+17+29,FTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((ATEXTbdy2[0]+250,ATEXTbdy[1], 12, 12))
- BUTTONBDYS.append((ATEXTbdy2[0]+250+17,ATEXTbdy[1], 12, 12))
- BUTTONBDYS.append((ATEXTbdy2[0]+250+17+17,ATEXTbdy[1], 24, 12))
- BUTTONBDYS.append((ATEXTbdy2[0]+250+17+17+29,ATEXTbdy[1], 24, 12))
- BUTTONBDYS.append((WTEXTbdy2[0]+250,WTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((WTEXTbdy2[0]+250+17,WTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((WTEXTbdy2[0]+250+17+17,WTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((WTEXTbdy2[0]+250+17+17+29,WTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((FTEXTbdy2[0]+250,FTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((FTEXTbdy2[0]+250+17,FTEXTbdy[1], 12, 12))
- BUTTONBDYS.append((FTEXTbdy2[0]+250+17+17,FTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((FTEXTbdy2[0]+250+17+17+29,FTEXTbdy[1], 24, 12))
- BUTTONBDYS.append((SCREEN.get_rect().right - 40,SCREEN.get_rect().bottom-90, 20, 15)) #INTERFERENCE
- BUTTONBDYS.append((SCREEN.get_rect().right - 40,SCREEN.get_rect().bottom-70, 20, 15)) #DEFLECTION
- BUTTONBDYS.append((SCREEN.get_rect().right - 40,SCREEN.get_rect().bottom-50, 20, 15)) #LONGITUDINAL
- BUTTONBDYS.append((SCREEN.get_rect().right - 90,SCREEN.get_rect().top+20, 20, 15)) #RESET all
- BUTTONBDYS.append((SCREEN.get_rect().right - 40,SCREEN.get_rect().bottom-30, 20, 15)) #RESET Screen
- BUTTONBDYS.append((SCREEN.get_rect().right - 40,SCREEN.get_rect().top+20, 20, 15)) #CLOSE X
- BUTTONBDYS.append((SCREEN.get_rect().right - 40,SCREEN.get_rect().bottom-110, 20, 15))#COHERENTIZE
- BUTTONBDYS.append((BTEXTbdy[0]+BTEXTbdy[2]+10,BTEXTbdy[1], 20, 15)) #SHOW <B>
- #OTHER VARS
- STARTINGPOS = (SCREEN.get_rect().right - 10, SCREEN.get_rect().centery)
- POINTS = []
- FREQ = int(float(FPS) / float(FREQUENCY))
- STARTINGPOS2 = (SCREEN.get_rect().right - 10, SCREEN.get_rect().centery)
- POINTS2 = []
- FREQ2 = int(float(FPS) / float(FREQUENCY2))
- POINTSINTERFERE = []
- R_POINTS = []
- #END
- JUST_A_VALYAH = 0
- SCREEN.fill((0, 0, 0))
- SOMEVALSFORWARD=[]
- SOMEVALSBACKWARD=[]
- ORIGINALS=[]
- GOLONGI=[]
- def close():
- pygame.quit()
- sys.exit()
- def pause():
- PAUSE = True
- while PAUSE:
- for event in pygame.event.get():
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- if event.type == KEYDOWN:
- if event.key == K_F1:
- PAUSE = False
- if event.type == MOUSEBUTTONDOWN:
- if event.button == 1:
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[29]):
- close()
- #pygame.mouse.set_cursor(*pygame.cursors.broken_x)
- #pygame.display.flip()
- pass
- def drawlongi(CHECK, FREQ):
- global LONGIbdys, SOMEVALS, ORIGINALS, GOLONGI
- tempotempy = []
- tempodo= 0
- if CHECK:
- ORIGINALS=[]
- GOLONGI=[]
- blablabla=(SCREEN.get_rect().width/NOOFLONGILINES)
- for a in range(NOOFLONGILINES):
- blablabla += SCREEN.get_rect().width/NOOFLONGILINES
- LONGIbdys.append(pygame.Rect(blablabla, SCREEN.get_rect().centery-100-LONGITUDINALheight/2, 2, LONGITUDINALheight))
- pygame.draw.line(SCREEN, (128, 128, 128), (LONGIbdys[a][0], LONGIbdys[a][1]), (LONGIbdys[a][0], LONGIbdys[a][1]+LONGITUDINALheight), 2)
- ORIGINALS = []
- for sublist in list(LONGIbdys):
- ORIGINALS.append(sublist[:])
- else:
- for y in LONGIbdys:
- #STARTINGPOS[0] - int(AMPLITUDE/9 *(math.sin((2*math.pi) * float (float(a)/float(FREQ))) ))
- #pygame.draw.line(SCREEN, (128, 128, 128), (a[0], a[1]), (a[0], a[1]+a[3]), 2)
- pygame.draw.rect(SCREEN, (255, 255, 255), y, 1)
- pygame.draw.circle(SCREEN, (255, 0, 0), (y.centerx, y.centery+170), 7, 7)
- pygame.draw.circle(SCREEN, (0, 255, 0), (y.centerx, y.centery+190), 7, 7)
- pygame.draw.circle(SCREEN, (0, 0, 255), (y.centerx, y.centery+210), 7, 7)
- pygame.draw.circle(SCREEN, (255, 0, 255), (y.centerx, y.centery+230), 7, 7)
- for x, z in GOLONGI:
- tempotempy.append(x)
- if not LONGIbdys.index(y) in tempotempy and tempodo < 1:
- GOLONGI.append([LONGIbdys.index(y), 0])
- tempodo += 1
- for x, y in GOLONGI:
- if y == FREQ:
- GOLONGI[GOLONGI.index([x, y])][1] = 0
- LONGIbdys[x][0] = ORIGINALS[x][0] - int(AMPLITUDE/3 *(math.sin((2*math.pi) * float (float(y)/float(FREQ)))))
- GOLONGI[GOLONGI.index([x, 0])][1] += 1
- else:
- LONGIbdys[x][0] = ORIGINALS[x][0] - int(AMPLITUDE/3 *(math.sin((2*math.pi) * float (float(y)/float(FREQ)))))
- GOLONGI[GOLONGI.index([x, y])][1] += 1
- return LONGIbdys
- def Reset(Type):
- global AMPLITUDE, AMPLITUDE2, FREQUENCY, FREQUENCY2, WAVELENGTH, WAVELENGTH2,WAVEVELOCITY, WAVEVELOCITY2, STARTINGPOS, POINTS, FREQ, STARTINGPOS2, POINTS2,FREQ2, POINTSINTERFERE, a, ab, INTERFERE, DEFLECT, LONGITUDINAL
- #Wave propertiess:
- if Type == "All":
- AMPLITUDE = 130
- FREQUENCY = 2
- WAVELENGTH= 114
- AMPLITUDE2= 0
- FREQUENCY2= 2
- WAVELENGTH2= 114
- ORIGINALS=[]
- GOLONGI=[]
- COHERENTIZE = False
- SHOW_B = False
- JUST_A_VALYAH = 0
- LONGITUDINALheight = 100
- NOOFLONGILINES = 70
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- INTERFERE = False
- DEFLECT = False
- LONGITUDINAL=False
- #OTHER VARS
- STARTINGPOS = (SCREEN.get_rect().right - 10, SCREEN.get_rect().centery)
- POINTS = []
- FREQ = int(float(FPS) / float(FREQUENCY))
- STARTINGPOS2 = (SCREEN.get_rect().right - 10, SCREEN.get_rect().centery)
- POINTS2 = []
- FREQ2 = int(float(FPS) / float(FREQUENCY2))
- POINTSINTERFERE = []
- R_POINTS = []
- #END
- #end
- a = 0
- ab = 0
- R_a= 0
- def collide_w_mouse(x, y, recto):
- rect =pygame.Rect(recto)
- if (x > rect.left) and (x < rect.right) and (y > rect.top) and (y < rect.bottom):
- return True
- else:
- return False
- def draw_inc_dec_buttons(window, bdy, buttontype, color):
- if buttontype == 0:
- pygame.draw.rect(window, color, bdy, 2)
- pygame.draw.line(window, (255,255,255), (bdy[0]+2, (bdy[1]+(bdy[3]/2))), (bdy[0]+bdy[2]-2,(bdy[1]+(bdy[3]/2))), 1)
- pygame.draw.line(window, (255,255,255), ((bdy[0]+(bdy[2]/2)), bdy[1]+2), ((bdy[0]+(bdy[2]/2)),bdy[1]+bdy[3]-2), 1)
- if buttontype == 1:
- pygame.draw.rect(window, color, bdy, 2)
- pygame.draw.line(window, (255,255,255), (bdy[0]+2, (bdy[1]+(bdy[3]/2))), (bdy[0]+bdy[2]-2,(bdy[1]+(bdy[3]/2))))
- if buttontype == 2:
- pygame.draw.rect(window, color, bdy, 2)
- pygame.draw.line(window, (255,255,255), (bdy[0]+2, (bdy[1]+(bdy[3]/2))), (bdy[0]+(bdy[2]/2)-2,(bdy[1]+(bdy[3]/2))), 1)
- pygame.draw.line(window, (255,255,255), ((bdy[0]+(bdy[2]/4)), bdy[1]+2), ((bdy[0]+(bdy[2]/4)),bdy[1]+bdy[3]-1), 1)
- pygame.draw.line(window, (255,255,255), (bdy[0]+(bdy[2]/2)+2, (bdy[1]+(bdy[3]/2))), (bdy[0]+bdy[2]-2,(bdy[1]+(bdy[3]/2))), 1)
- pygame.draw.line(window, (255,255,255), ((bdy[0]+((bdy[2]/2)+(bdy[2]/4))), bdy[1]+2), ((bdy[0]+((bdy[2]/2)+(bdy[2]/4))),bdy[1]+bdy[3]-1), 1)
- if buttontype == 3:
- pygame.draw.rect(window, color, bdy, 2)
- pygame.draw.line(window, (255,255,255), (bdy[0]+2, (bdy[1]+(bdy[3]/2))), (bdy[0]+(bdy[2]/2)-2,(bdy[1]+(bdy[3]/2))), 1)
- pygame.draw.line(window, (255,255,255), (bdy[0]+(bdy[2]/2)+2, (bdy[1]+(bdy[3]/2))), (bdy[0]+bdy[2]-2,(bdy[1]+(bdy[3]/2))), 1)
- if buttontype == 4:
- pygame.draw.rect(window, color, bdy, 2)
- if INTERFERE == True:
- pygame.draw.lines(window, (255,255,255), False, [(bdy[0]+2, bdy[1]+2), (bdy[0]+6, bdy[1]+bdy[3]) ,(bdy[0]+bdy[2], bdy[1])], 2)
- if buttontype == 5:
- pygame.draw.rect(window, color, bdy, 2)
- if DEFLECT == True:
- pygame.draw.lines(window, (255,255,255), False, [(bdy[0]+2, bdy[1]+2), (bdy[0]+6, bdy[1]+bdy[3]) ,(bdy[0]+bdy[2], bdy[1])], 2)
- if buttontype == 6:
- pygame.draw.rect(window, color, bdy, 2)
- if LONGITUDINAL == True:
- pygame.draw.lines(window, (255,255,255), False, [(bdy[0]+2, bdy[1]+2), (bdy[0]+6, bdy[1]+bdy[3]) ,(bdy[0]+bdy[2], bdy[1])], 2)
- if buttontype == 7:
- pygame.draw.rect(window, color, bdy, 2)
- pygame.draw.line(window, (255,255,255), (bdy[0]+8, (bdy[1]+(bdy[3]/2))), (bdy[0]+bdy[2]-8,(bdy[1]+(bdy[3]/2))), 6)
- if buttontype == 8:
- pygame.draw.rect(window, color, bdy, 2)
- pygame.draw.line(window, (255,0,0), (bdy[0]+5, bdy[1]+2), (bdy[0]+bdy[2]-5,(bdy[1]+bdy[3]-2)), 2)
- pygame.draw.line(window, (255,0,0), ((bdy[0]+5), bdy[1]+bdy[3]-2), (bdy[0]+bdy[2]-5, bdy[1]+2), 2)
- if buttontype == 9:
- pygame.draw.rect(window, color, bdy, 2)
- if SHOW_B == True:
- pygame.draw.lines(window, (255,255,255), False, [(bdy[0]+2, bdy[1]+2), (bdy[0]+6, bdy[1]+bdy[3]) ,(bdy[0]+bdy[2], bdy[1])], 2)
- if buttontype == 10:
- pygame.draw.rect(window, color, bdy, 2)
- if PAUSE == False:
- pygame.draw.lines(window, (255,255,255), False, [(bdy[0]+2, bdy[1]+2), (bdy[0]+6, bdy[1]+bdy[3]) ,(bdy[0]+bdy[2], bdy[1])], 2)
- def blit_everything():
- SCREEN.blit(VTEXT, VTEXTbdy)
- SCREEN.blit(WTEXT, WTEXTbdy)
- SCREEN.blit(FTEXT, FTEXTbdy)
- if LONGITUDINAL:
- SCREEN.blit(ATEXTL, ATEXTbdy)
- else:
- SCREEN.blit(ATEXT, ATEXTbdy)
- SCREEN.blit(PXTEXT, PXTEXTbdy)
- SCREEN.blit(VTEXT, VTEXTbdy2)
- SCREEN.blit(FTEXT, FTEXTbdy2)
- SCREEN.blit(ATEXT, ATEXTbdy2)
- SCREEN.blit(WTEXT, WTEXTbdy2)
- SCREEN.blit(V, Vbdy)
- SCREEN.blit(A, Abdy)
- SCREEN.blit(W, Wbdy)
- SCREEN.blit(F, Fbdy)
- SCREEN.blit(V2, Vbdy2)
- SCREEN.blit(A2, Abdy2)
- SCREEN.blit(W2, Wbdy2)
- SCREEN.blit(F2, Fbdy2)
- SCREEN.blit(WAVEATEXT, WAVEATEXTbdy)
- SCREEN.blit(WAVEBTEXT, WAVEBTEXTbdy)
- SCREEN.blit(NTEXT, NTEXTbdy)
- SCREEN.blit(ITEXT, ITEXTbdy)
- SCREEN.blit(DTEXT, DTEXTbdy)
- SCREEN.blit(LTEXT, LTEXTbdy)
- SCREEN.blit(CTEXT, CTEXTbdy)
- if LONGITUDINAL:
- SCREEN.blit(L0TEXT, L0TEXTbdy)
- SCREEN.blit(L1TEXT, L1TEXTbdy)
- SCREEN.blit(L2TEXT, L2TEXTbdy)
- SCREEN.blit(RTEXT, RTEXTbdy)
- SCREEN.blit(R2TEXT, R2TEXTbdy)
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[0], 0, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[1], 1, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[2], 2, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[3], 3, (255, 0, 0))
- if LONGITUDINAL == False:
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[4], 0, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[5], 1, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[6], 2, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[7], 3, (255, 0, 0))
- else:
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[4], 0, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[5], 1, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[6], 2, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[7], 3, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[8], 0, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[9], 1, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[10], 2, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[11], 3, (255, 0, 0))
- if DEFLECT == False and LONGITUDINAL == False and SHOW_B:
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[12], 0, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[13], 1, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[14], 2, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[15], 3, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[16], 0, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[17], 1, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[18], 2, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[19], 3, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[20], 0, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[21], 1, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[22], 2, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[23], 3, (255, 0, 0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[31], 9, (0,255,0))
- elif DEFLECT or LONGITUDINAL or SHOW_B == False:
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[12], 0, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[13], 1, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[14], 2, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[15], 3, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[16], 0, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[17], 1, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[18], 2, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[19], 3, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[20], 0, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[21], 1, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[22], 2, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[23], 3, (84, 84, 84))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[24], 4, (255,0 ,255))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[25], 5, (255,255,0 ))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[26], 6, (0 ,255,255))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[27], 7, (255,255,255))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[28], 7, (255,255,255))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[29], 8, (255,0,0))
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[30], 7, (128,255,128))
- if SHOW_B == False and (DEFLECT or LONGITUDINAL):
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[31], 9, (84,84,84))
- else:
- draw_inc_dec_buttons(SCREEN, BUTTONBDYS[31], 9, (0,255,0))
- def createinterference(POINTS, POINTS2):
- POINTS3 = POINTS + POINTS2
- POINTS3.sort()
- FINAL =[]
- temp = []
- NOTNOW = False
- for aq in POINTS3:
- if temp != []:
- NOTNOW = False
- if temp == []:
- temp.append(aq)
- NOTNOW = True
- if not NOTNOW:
- for bq in temp:
- if aq[0]-bq[0] == 0:
- temp = [(aq[0], aq[1]+bq[1]-STARTINGPOS[1])]
- FINAL += temp
- temp=[]
- else:
- temp= [bq]
- #FINAL += temp
- temp =[]
- NOTNOW = True
- return sorted(FINAL)
- a = 0
- ab = 0
- R_a = 0
- RESET = False
- DEFLECTion = False
- LONGIbdys=[]
- while True:
- if RESET == "Screen":
- Reset(RESET)
- RESET = False
- if RESET == "All":
- Reset(RESET)
- RESET = False
- if COHERENTIZE == True:
- a = 0
- ab = 0
- COHERENTIZE = False
- if a == FREQ:
- a = 0
- if R_a == FREQ:
- R_a = 0
- if ab == FREQ2:
- ab = 0
- if LONGITUDINAL == False:
- V= FONT.render(str(WAVEVELOCITY), True, (255, 255, 255))
- else:
- V= FONT.render(str(1400), True, (255, 0, 0))
- Vbdy = V.get_rect()
- Vbdy.left = VTEXTbdy.right + 30
- Vbdy.centery=VTEXTbdy.centery
- A= FONT.render(str(AMPLITUDE), True, (255, 255, 255))
- Abdy = A.get_rect()
- Abdy.left = ATEXTbdy.right + 30
- Abdy.centery=ATEXTbdy.centery
- F= FONT.render(str(FREQUENCY), True, (255, 255, 255))
- Fbdy = F.get_rect()
- Fbdy.left = FTEXTbdy.right + 12
- Fbdy.centery=FTEXTbdy.centery
- if LONGITUDINAL == False:
- W= FONT.render(str(WAVELENGTH), True, (255, 255, 255))
- else:
- W= FONT.render(str(1400/FREQUENCY), True, (255, 0, 0))
- Wbdy = W.get_rect()
- Wbdy.left = WTEXTbdy.right + 50
- Wbdy.centery=WTEXTbdy.centery
- V2= FONT.render(str(WAVEVELOCITY2), True, (255, 255, 255))
- Vbdy2 = V2.get_rect()
- Vbdy2.left = VTEXTbdy2.right + 30
- Vbdy2.centery=VTEXTbdy2.centery
- A2= FONT.render(str(AMPLITUDE2), True, (255, 255, 255))
- Abdy2 = A2.get_rect()
- Abdy2.left = ATEXTbdy2.right + 30
- Abdy2.centery=ATEXTbdy2.centery
- F2= FONT.render(str(FREQUENCY2), True, (255, 255, 255))
- Fbdy2 = F2.get_rect()
- Fbdy2.left = FTEXTbdy2.right + 12
- Fbdy2.centery=FTEXTbdy2.centery
- W2= FONT.render(str(WAVELENGTH2), True, (255, 255, 255))
- Wbdy2 = W2.get_rect()
- Wbdy2.left = WTEXTbdy2.right + 50
- Wbdy2.centery=WTEXTbdy2.centery
- for event in pygame.event.get():
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- if event.type == KEYDOWN:
- if event.key == K_F1:
- pause()
- if event.type == MOUSEBUTTONDOWN:
- if event.button == 1:
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[0]) and AMPLITUDE < 380:
- AMPLITUDE += 10
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[1]) and AMPLITUDE > -380:
- AMPLITUDE -= 10
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[2]) and AMPLITUDE < 370:
- AMPLITUDE += 20
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[3]) and AMPLITUDE > -370:
- AMPLITUDE -= 20
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[4]):
- WAVELENGTH += 19
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[5]) and WAVELENGTH > 19:
- WAVELENGTH -= 19
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[6]):
- WAVELENGTH += 38
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[7]) and WAVELENGTH > 38:
- WAVELENGTH -= 38
- WAVEVELOCITY = abs(FREQUENCY * WAVELENGTH)
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[8]) and FREQUENCY < 12:
- FREQUENCY += 1
- FREQ = int(float(FPS) / float(FREQUENCY))
- if LONGITUDINAL:
- LONGIbdys = []
- WAVELENGTH = 1400/FREQUENCY
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[9]) and FREQUENCY > 1:
- FREQUENCY -= 1
- FREQ = int(float(FPS) / float(FREQUENCY))
- if LONGITUDINAL:
- LONGIbdys = []
- WAVELENGTH = 1400/FREQUENCY
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[10]) and FREQUENCY < 11:
- FREQUENCY += 2
- FREQ = int(float(FPS) / float(FREQUENCY))
- if LONGITUDINAL:
- LONGIbdys = []
- WAVELENGTH = 1400/FREQUENCY
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[11]) and FREQUENCY > 2:
- FREQUENCY -= 2
- FREQ = int(float(FPS) / float(FREQUENCY))
- if LONGITUDINAL:
- LONGIbdys = []
- WAVELENGTH = 1400/FREQUENCY
- WAVEVELOCITY = FREQUENCY * WAVELENGTH
- if DEFLECT == False and LONGITUDINAL == False and SHOW_B:
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[12]) and AMPLITUDE2 < 380:
- AMPLITUDE2 += 10
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[13]) and AMPLITUDE2 > -380:
- AMPLITUDE2 -= 10
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[14]) and AMPLITUDE2 < 370:
- AMPLITUDE2 += 20
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[15]) and AMPLITUDE2 > -370:
- AMPLITUDE2 -= 20
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[16]):
- WAVELENGTH2 += 19
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[17]) and WAVELENGTH2 > 19:
- WAVELENGTH2 -= 19
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[18]):
- WAVELENGTH2 += 38
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[19]) and WAVELENGTH2 > 38:
- WAVELENGTH2 -= 38
- WAVEVELOCITY2 = abs(FREQUENCY2 * WAVELENGTH2)
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[20]) and FREQUENCY2 < 12:
- FREQUENCY2 += 1
- FREQ2 = int(float(FPS) / float(FREQUENCY2))
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[21]) and FREQUENCY2 > 1:
- FREQUENCY2 -= 1
- FREQ2 = int(float(FPS) / float(FREQUENCY2))
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[22]) and FREQUENCY2 < 11:
- FREQUENCY2 += 2
- FREQ2 = int(float(FPS) / float(FREQUENCY2))
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[23]) and FREQUENCY2 > 2:
- FREQUENCY2 -= 2
- FREQ2 = int(float(FPS) / float(FREQUENCY2))
- WAVEVELOCITY2 = FREQUENCY2 * WAVELENGTH2
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[24]):
- if INTERFERE:
- INTERFERE = False
- else:
- INTERFERE = True
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[25]):
- if DEFLECT:
- DEFLECT = False
- else:
- DEFLECT = True
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[26]):
- if LONGITUDINAL:
- LONGITUDINAL = False
- else:
- LONGITUDINAL = True
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[27]):
- RESET = "All"
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[28]):
- RESET = "Screen"
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[29]):
- close()
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[30]):
- COHERENTIZE = True
- if collide_w_mouse(event.pos[0], event.pos[1], BUTTONBDYS[31]) and DEFLECT ==False and LONGITUDINAL == False:
- if SHOW_B:
- SHOW_B = False
- else:
- SHOW_B = True
- posy= STARTINGPOS[1] - int(AMPLITUDE *(math.sin((2*math.pi) * float (float(a)/float(FREQ))) ) )
- posx= STARTINGPOS[0] - (WAVEVELOCITY/FREQUENCY)/FPS
- POINTS.append([posx, posy])
- if INTERFERE == False and LONGITUDINAL == False:
- pygame.draw.line(SCREEN, (255, 255, 255), (STARTINGPOS[0], posy), (STARTINGPOS[0], posy), 10)
- pygame.draw.line(SCREEN, (255, 255, 255), STARTINGPOS, (0, SCREEN.get_rect().centery), 2)
- if len(POINTS) > 1 and INTERFERE == False and LONGITUDINAL == False:
- pygame.draw.lines(SCREEN, (255, 0, 0), False, POINTS, 5)
- for b in range(len(POINTS)):
- #pygame.draw.line(SCREEN, (255, 0, 0), (b[0], b[1]), (b[0], b[1]), 5)
- POINTS[b][0] -= int(float(float(FREQUENCY) * float(WAVELENGTH))/float(FPS))
- TEMPVALUE = -1
- for b in range(len(POINTS)):
- TEMPVALUE += 1
- if POINTS[TEMPVALUE][0] < -10 and DEFLECT:
- POINTS[TEMPVALUE][1] = SCREEN.get_rect().height - POINTS[TEMPVALUE][1]
- R_POINTS.append(POINTS[TEMPVALUE])
- del POINTS[TEMPVALUE]
- TEMPVALUE -= 1
- elif POINTS[TEMPVALUE][0] < -10:
- del POINTS[TEMPVALUE]
- TEMPVALUE -= 1
- TEMPVALUE = -1
- for b in range(len(R_POINTS)):
- TEMPVALUE += 1
- if R_POINTS[TEMPVALUE][0] > SCREEN.get_rect().width + 10:
- del R_POINTS[TEMPVALUE]
- TEMPVALUE -= 1
- posy2= STARTINGPOS2[1] - int(AMPLITUDE2 *( math.sin((2*math.pi) * float (float(ab)/float(FREQ2))) ) )
- posx2= STARTINGPOS[0] - (WAVEVELOCITY/FREQUENCY)/FPS
- POINTS2.append([posx2, posy2])
- if INTERFERE == False and DEFLECT == False and LONGITUDINAL == False and SHOW_B:
- pygame.draw.line(SCREEN, (255, 255, 255), (STARTINGPOS2[0], posy2), (STARTINGPOS2[0], posy2), 10)
- pygame.draw.line(SCREEN, (255, 255, 255), STARTINGPOS2, (0, SCREEN.get_rect().centery), 2)
- if len(POINTS2) > 1 and INTERFERE == False and DEFLECT == False and LONGITUDINAL == False and SHOW_B:
- pygame.draw.lines(SCREEN, (0, 0, 255), False, POINTS2, 5)
- for b in range(len(POINTS2)):
- #pygame.draw.line(SCREEN, (255, 0, 0), (b[0], b[1]), (b[0], b[1]), 5)
- POINTS2[b][0] -= int(float(float(FREQUENCY2) * float(WAVELENGTH2))/float(FPS))
- TEMPVALUE2 = -1
- for b in range(len(POINTS2)):
- TEMPVALUE2 += 1
- if POINTS2[TEMPVALUE2][0] < -10:
- del POINTS2[TEMPVALUE2]
- TEMPVALUE2 -= 1
- if DEFLECT == True and LONGITUDINAL == False:
- if JUST_A_VALYAH ==1:
- pygame.draw.rect(SCREEN, (255, 255, 255), (0, 192, 5, 384), 5)
- JUST_A_VALYAH = 0
- elif JUST_A_VALYAH == 0:
- pygame.draw.rect(SCREEN, (255, 0, 0), (0, 192, 5, 384), 5)
- JUST_A_VALYAH = 1
- if len(R_POINTS) > 1 and INTERFERE == False:
- pygame.draw.lines(SCREEN, (255, 255, 255), False, R_POINTS[::-1], 5)
- for b in range(len(R_POINTS)):
- #pygame.draw.line(SCREEN, (255, 0, 0), (b[0], b[1]), (b[0], b[1]), 5)
- R_POINTS[b][0] += int(float(float(FREQUENCY) * float(WAVELENGTH))/float(FPS))
- else:
- R_POINTS = []
- if INTERFERE == True and LONGITUDINAL == False:
- if DEFLECT == False:
- POINTSINTERFERE= createinterference(POINTS, POINTS2)
- else:
- POINTSINTERFERE= createinterference(POINTS, R_POINTS)
- # for val1, val2 in zip(TEMPO1, TEMPO2):
- #
- # POINTSINTERFERE.append([val2[0], val1[1]+(val2[1]-STARTINGPOS[1])])
- # if WAVEVELOCITY == WAVEVELOCITY2:
- # for val1, val2 in zip(POINTS, POINTS2):
- # POINTSINTERFERE.append([val2[0], val1[1]+(val2[1]-STARTINGPOS[1])])
- # else:
- # SCREEN.blit(ERTEXT, ERTEXTbdy)
- # SCREEN.blit(ERTEXT2, ERTEXT2bdy)
- if len(POINTSINTERFERE) > 1:
- pygame.draw.lines(SCREEN, (255, 0, 255), False, POINTSINTERFERE, 5)
- pygame.draw.line(SCREEN, (255, 255, 255), STARTINGPOS2, (0, SCREEN.get_rect().centery), 2)
- if LONGITUDINAL == True:
- #LONGposx= STARTINGPOS[0] - int(AMPLITUDE/9 *(math.sin((2*math.pi) * float (float(a)/float(FREQ))) ))
- #LONGgenbdy= pygame.Rect(LONGposx-32, SCREEN.get_rect().centery-LONGITUDINALheight/2, 20,LONGITUDINALheight)
- if len(LONGIbdys) == 0:
- LONGIbdys = drawlongi(True,FREQ)
- else:
- LONGIbdys = drawlongi(False,FREQ)
- #pygame.draw.line(SCREEN, (255, 255, 255), (LONGposx-32, SCREEN.get_rect().centery-LONGITUDINALheight/2), (LONGposx-32, SCREEN.get_rect().centery+LONGITUDINALheight/2), 10)
- blit_everything()
- pygame.mouse.set_cursor(*pygame.cursors.broken_x)
- pygame.display.flip()
- FPS_CLOCK.tick(FPS)
- SCREEN.fill((0, 0, 0))
- a += 1
- ab += 1
- if DEFLECT == True and POINTS[0][0] < 0:
- R_a += 1
- else:
- R_a = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement