Author Topic: I'm new to QB64 and I'm having a conniption  (Read 6269 times)

0 Members and 1 Guest are viewing this topic.

Offline romichess

  • Forum Regular
  • Posts: 145
    • View Profile
I'm new to QB64 and I'm having a conniption
« on: December 02, 2019, 02:04:36 pm »
I am having a conniption because my code works when I don't think it should!

First I tried, IF  _MOUSEINPUT THEN : X = _MOUSEX : y = _MOUSEY : END IF.

That can't be used because it fills a buffer with input that takes time to empty. I looked for a clear mouse input buffer command but there does not seem to be one.

My game is to run in real time. My concern was interfering with the real time flow by getting stuck in a do loop while moving the mouse across the screen. But that does not happen and I don't know why. Can someone explain?

Code: QB64: [Select]
  1. DIM repeat AS INTEGER
  2.  
  3. repeat = 1
  4.  
  5.  
  6. SCREEN _NEWIMAGE(sw, sh, 256)
  7.  
  8.  
  9. WHILE repeat
  10.  
  11.     _LIMIT 60
  12.  
  13.  
  14.         x = _MOUSEX
  15.         y = _MOUSEY
  16.  
  17.     LOOP
  18.  
  19.     LOCATE 1, 1
  20.     PRINT x, y
  21.  
  22.     _DISPLAY
  23.  
  24.     IF INKEY$ = CHR$(27) THEN repeat = 0
  25.  
  26.  
My name is Michael, but you can call me Mike :)

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #1 on: December 02, 2019, 02:10:36 pm »
Welcome romichess! just one little less than intuitive item

Code: QB64: [Select]
  1. DIM repeat AS INTEGER
  2.  
  3. repeat = 1
  4.  
  5.  
  6. SCREEN _NEWIMAGE(sw, sh, 256)
  7.  
  8.  
  9. WHILE repeat
  10.  
  11.     _LIMIT 60
  12.  
  13.     WHILE _MOUSEINPUT: WEND ' <<<<<<<<<< poll the mouse here in main game loop
  14.     '
  15.     x = _MOUSEX
  16.     y = _MOUSEY
  17.     mb = _MOUSEBUTTON(1) ' <<<<<<<<< is left mouse button down?
  18.  
  19.  
  20.     LOCATE 1, 1
  21.     PRINT x, y, mb
  22.  
  23.     _DISPLAY
  24.  
  25.     IF INKEY$ = CHR$(27) THEN repeat = 0
  26.  
  27.  
« Last Edit: December 02, 2019, 02:12:12 pm by bplus »

Offline romichess

  • Forum Regular
  • Posts: 145
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #2 on: December 02, 2019, 11:08:26 pm »
Thank you bplus. I'll just accept the less than intuitive explanation.
My name is Michael, but you can call me Mike :)

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #3 on: December 03, 2019, 12:29:34 am »
Yeah, all I can say is this line
Code: QB64: [Select]
updates all the mouse stuff like _MOUSEX and _MOUSEY and _MOUSEBUTTON(1) and the others, so put that line in your main loop and you will keep the mouse variables up to date.

The only time you need to do something inside that loop is to get the mousewheel updates as explained in the Wiki.

Offline SMcNeill

  • QB64 Developer
  • Forum Resident
  • Posts: 3972
    • View Profile
    • Steve’s QB64 Archive Forum
Re: I'm new to QB64 and I'm having a conniption
« Reply #4 on: December 03, 2019, 02:38:42 am »
Let’s see if I can help explain away the mystery.

A few things to establish first:  Your OS is actually what interacts with your hardware.  Windows/Mac/Linux all handle the drivers and such, and they read our input devices; QB64 doesn’t do this ourselves.  We just read the input buffers that the OS reserves for us, and use them to associate with the device they tell us they belong to.

Now, your OS is going to have a set speed that it polls the hardware at, to check device state at a certain frequency.  A keyboard might check changes 10 times a second, whereas a mouse might poll for updates 100 times a second.  Some of these settings you can tweak via the OS interface (such as keyboard repeat rate), some of them you can’t.  (At least not easily, that I know of.)

Now, how does this affect our programming inside QB64?  Let’s look at a few simple programs:

Code: [Select]
DO
    x = _MOUSEINPIT
LOOP

Now with the above, we might process that do loop 1000 times a second, while the hardware is polling the mouse 100 times a second.  We’re going to catch every mouse event, keep the buffer clear, and have no issues with anything.

Code: [Select]
DO
   x = _MOUSEINPUT
    _LIMIT 10
LOOP

Now, however, we’re just doing the do loop 10 times a second, while the hardware is polling the mouse 100 times a second.  We’re never going to clear that mouse buffer, so our program is always going to respond to mouse events that occurred in the past.  We set a limit to use less CPU and play nice with other programs, and we’re not looping as fast as the hardware is putting stuff into the buffer.

So what’s the solution??

Code: [Select]
DO
    WHILE _MOUSEINPUT: _WEND
     _LIMIT 10
LOOP

Now we’re running our loop 10 times a second.  The hardware is polling the mouse 100 times a second...

And we throw away 90% of that information!

What a real-time event log might look like is similar or this:

MILISECONDS
0 QB64 runs loop.  Mouse at 64, 128
1 Mouse at 64, 128.2
2 Mouse at 64, 128.4
3 Mouse at 64, 128.6
4 Mouse at 64, 128.8
5 Mouse at 64, 129.1
6 Mouse at 64, 129.3
7 Mouse at 64, 129.6
8 Mouse at 64, 129.8
9 Mouse at 64, 130.1
10 QB64 does loop.  Mouse at 64, 130.4

Now, do we *really* care where the mouse was in that fraction between fractional seconds of our DO..LOOP?  Or do we really only care about *where it’s at when QB64 loops back around to it again*??

We toss away a lot of the information, with the logic of:  “I don’t care where it was 0.002 seconds ago, I what to know where it is NOW.”

Think of it like trying to pace off 1000 feet while walking.  You don’t put your feet heel to toe and try and count every exact span of your foot.  You just care about each individual step taken, and what your steady stride is.  You ignore that fractional information, for the expediency of simply getting from Point A to Point B in a reasonable manner.

And that’s basically WHY bplus’s example works for us.  We’re only reacting to the mouse’s state when we poll it; not whatever it might be between those loops.
https://github.com/SteveMcNeill/Steve64 — A github collection of all things Steve!

Offline Pete

  • Forum Resident
  • Posts: 2361
  • Cuz I sez so, varmint!
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #5 on: December 03, 2019, 02:59:00 am »
Nice example, Steve, but I would have gone with Schrodinger's mouse. Depending on when you observed it, Schrodinger's cat did or did not eat it.

Pete
Want to learn how to write code on cave walls? https://www.tapatalk.com/groups/qbasic/qbasic-f1/

Offline TempodiBasic

  • Forum Resident
  • Posts: 1792
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #6 on: December 03, 2019, 04:58:48 am »
try this for mouse event cleaner...
https://www.qb64.org/forum/index.php?topic=1744.msg110135#msg110135

and if you want to interact with keyboard also while you are  _MOUSEINPUT
you can move this line of your code
Code: QB64: [Select]
  1. IF INKEY$ = CHR$(27) THEN repeat = 0
in the inner of the loop of mouse polling.

Welcome to QB64 forum
Programming isn't difficult, only it's  consuming time and coffee

Offline Richard

  • Seasoned Forum Regular
  • Posts: 364
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #7 on: December 03, 2019, 05:46:54 am »
Pete

You made a serious typo:-

o   should be replaced with   ö   (Alt 148   Code Page 437)

Offline romichess

  • Forum Regular
  • Posts: 145
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #8 on: December 03, 2019, 10:17:08 am »
Thanks guys. I get it now.

WHILE _MOUSEINPUT : WEND is a cat that eats up all the mice in the cage except the last one which it saves to play with!
My name is Michael, but you can call me Mike :)

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #9 on: December 03, 2019, 11:47:06 am »
Hi romichess,

There is another conniption causing issue with the mouse you might want to be prepared for that TempodiBasic has alluded to.

This involves executing some code when the mouse is clicked.

The _MOUSEBUUTON(1) reading only tells you when the mouse button is being pressed and if you execute a block of code at that time, you are likely to execute it several times if the user is slow to release or the code is slow to read the mouse clear update, _Mousebutton(1) = 0.

I have only recently seen a best solution by Steve to be clear of mouse button down condition before executing a "Mouse Click Event" block of code.

I have only tested this in newly revised cSleep but looks good to me and you know Steve came up with it so it's got to be good (if it is bug free).

A demo of the technique:
Code: QB64: [Select]
  1. OPTION _EXPLICIT 'B+ actually this might be better than old version of cSleep because handles time also
  2.  
  3. PRINT "Hello World, press key, click mouse or wait 5 secs for goodbye."
  4. cSleep 5
  5. PRINT "goodbye world"
  6.  
  7. 'c for click + SLEEP, this does force you to commit to a max time to wait
  8. SUB cSleep (secsWait AS DOUBLE) 'wait for keypress or mouseclick, solves midnight problem nicely I think
  9.     DIM wayt AS INTEGER, oldMouse AS INTEGER, k AS LONG, startTime AS DOUBLE
  10.  
  11.     startTime = TIMER
  12.     wayt = 1
  13.     _KEYCLEAR
  14.     WHILE wayt
  15.         WHILE _MOUSEINPUT: WEND
  16.         IF _MOUSEBUTTON(1) AND oldMouse = 0 THEN wayt = 0 ' <<<<<<<<<< execute Mouse Click Event
  17.         oldMouse = _MOUSEBUTTON(1) ' <<< this is Steve's cool way to get clear of mouse click
  18.         k = _KEYHIT: IF k > 0 THEN _KEYCLEAR: wayt = 0  
  19.         IF TIMER - startTime < 0 THEN 'past midnight
  20.             IF TIMER + 24 * 60 * 60 - startTime > secsWait THEN wayt = 0
  21.         ELSE
  22.             IF TIMER - startTime >= secsWait THEN wayt = 0
  23.         END IF
  24.         _LIMIT 30
  25.     WEND
  26.  
  27. 'here is steve's   with midnight problem but really nice clear of mouse (and keypresses?)
  28. SUB Pause (time AS _FLOAT)
  29.     DIM ExitTime AS _FLOAT, k AS LONG, oldMouse AS INTEGER
  30.     _KEYCLEAR 'clear the keyboard buffer so we don't automatically exit the routine
  31.     IF time <= 0 THEN ExitTime = 1.18E+1000 ELSE ExitTime = time + TIMER
  32.     DO
  33.         WHILE _MOUSEINPUT: WEND
  34.         IF _MOUSEBUTTON(1) AND NOT oldMouse THEN EXIT SUB
  35.         k = _KEYHIT: IF k > 0 THEN _KEYCLEAR: EXIT SUB 'clear any stray key events so they don't mess with code outside the Pause.
  36.         oldMouse = _MOUSEBUTTON(1)
  37.         _LIMIT 10
  38.     LOOP UNTIL ExitTime < TIMER
  39.  
  40.  

The oldMouse variable helps us get clear of the mouse down condition before we execute our mouse click code.
« Last Edit: December 03, 2019, 12:26:14 pm by bplus »

Offline MasterGy

  • Seasoned Forum Regular
  • Posts: 327
  • people lie, math never lies
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #10 on: December 03, 2019, 01:23:39 pm »
Hi ! familiar problem, I used to say this:

do

    FOR ttt = 0 TO 1000: x = _MOUSEINPUT: NEXT ttt   
X = _MOUSEX
...

loop

Offline romichess

  • Forum Regular
  • Posts: 145
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #11 on: December 03, 2019, 01:25:56 pm »
Hi back bplus,

That looks simple enough! I have actually already put some thought into this. My imagined (not tested) solution was just to record the x,y coordinates of the button down and compare them to the button up x,y. If they are very close then do the action on mouse up. If the x/y are too different then assume the user changed his mind and moved the mouse while holding down the button. So then just ignore the mouse up event.

Edit: I forgot to mention that once the x,y of the button down event is saved a new x,y cannot be saved until the old x,y is cleared by a button up.
« Last Edit: December 03, 2019, 01:40:17 pm by romichess »
My name is Michael, but you can call me Mike :)

Offline SMcNeill

  • QB64 Developer
  • Forum Resident
  • Posts: 3972
    • View Profile
    • Steve’s QB64 Archive Forum
Re: I'm new to QB64 and I'm having a conniption
« Reply #12 on: December 03, 2019, 02:04:42 pm »
My simple idea for mouse presses is this one:

Code: QB64: [Select]
  1. DIM SHARED mb(1 TO 3) AS INTEGER '3 variables to hold the buttons
  2. DIM SHARED ms AS INTEGER 'a variable to hold the mouse scroll
  3.  
  4.  
  5.  
  6.  
  7. 'Before the main loop, do once:
  8. WHILE _MOUSEINPUT: WEND 'clear the mouse buffer once
  9. FOR i = 1 TO 3: mb(i) = _MOUSEBUTTON(i): NEXT 'get the button status to start with, to make certain it isn't down to begin with.
  10.  
  11. 'main loop
  12.     WHILE _MOUSEINPUT: ms = ms + _MOUSEWHEEL: WEND 'track the changes to the mouse wheel up or down
  13.     IF _MOUSEBUTTON(1) AND NOT mb(1) THEN LeftClick = LeftClick + 1 'if we press the button down, and it wasn't already down, then it's a click!
  14.     IF _MOUSEBUTTON(2) AND NOT mb(2) THEN RightClick = RightClick + 1
  15.     IF _MOUSEBUTTON(3) AND NOT mb(3) THEN MidClick = MidClick + 1
  16.  
  17.     CLS
  18.     PRINT "Mouse X:"; _MOUSEX
  19.     PRINT "Mouse Y:"; _MOUSEY
  20.     PRINT "Left Clicks:"; LeftClick
  21.     PRINT "Middle Clicks:"; MidClick
  22.     PRINT "Right Clicks:"; RightClick
  23.     PRINT
  24.     PRINT "Mouse Wheel Scrolled:"; ms
  25.  
  26.     FOR i = 1 TO 3: mb(i) = _MOUSEBUTTON(i): NEXT 'get the button status to start with
  27.     _LIMIT 60

Use a variable to store the mouse button state, and only if it was UP on the last pass through the loop, do we count it as a successful click DOWN on this pass.
https://github.com/SteveMcNeill/Steve64 — A github collection of all things Steve!

Offline romichess

  • Forum Regular
  • Posts: 145
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #13 on: December 03, 2019, 07:05:16 pm »
Thanks! :)
My name is Michael, but you can call me Mike :)

Offline romichess

  • Forum Regular
  • Posts: 145
    • View Profile
Re: I'm new to QB64 and I'm having a conniption
« Reply #14 on: December 03, 2019, 08:43:23 pm »
Thanks everyone! I have achieved my first goal which is kind of a proof of concept moment. I think my code is not too big to post here. Next I will go over every line to clean it up. I'm trying to create a realtime game similar to Master OF Orion 1. Don't worry, :) , the graphics will be updated. First I want to get a working game before I worry about graphics or sound.

So far all the code does is create 100 stars. They have a name, color, size and location. The neat part so far is that when a star is moused over it prints the star name in the upper left corner. After cleaning up the code scaling for various graphics resolutions will be next. Then a hard one it would seem. Instead of printing the name of the star in the upper left corner it will place a panel on the screen next to the star. The panel will stay if the star is left clicked until it is clicked again. Otherwise the panel will disappear when the mouse moves off of the star. I could use a pointer or two as to how to print in the panel! And of course any pointers or comments at all are welcome! 

Code: QB64: [Select]
  1. TYPE stars
  2.     n AS STRING * 10
  3.     x AS INTEGER
  4.     y AS INTEGER
  5.     o AS INTEGER
  6.     c AS INTEGER
  7.     s AS INTEGER
  8.     t AS INTEGER
  9.     p AS INTEGER
  10.  
  11. DECLARE SUB NewGame
  12. DECLARE SUB PutStars
  13. DECLARE SUB GiveName
  14. DECLARE SUB ShowPanel (i)
  15.  
  16. DIM repeat AS INTEGER
  17. DIM SHARED star(100) AS stars
  18. DIM ch AS STRING * 1
  19. DIM SHARED names(200) AS STRING * 10
  20.  
  21. repeat = 1
  22.  
  23.  
  24. SCREEN _NEWIMAGE(sw, sh, 256)
  25.  
  26.  
  27. GiveName
  28.  
  29. NewGame
  30.  
  31. WHILE repeat
  32.  
  33.     _LIMIT 60
  34.  
  35.     CLS
  36.  
  37.     PutStars
  38.  
  39.  
  40.     x = _MOUSEX
  41.     y = _MOUSEY
  42.     mb = _MOUSEBUTTON(1)
  43.  
  44.     FOR i = 0 TO 99
  45.         dx = star(i).x - x
  46.         dy = star(i).y - y
  47.         IF ABS(dx) <= star(i).s + 6 AND ABS(dy) <= star(i).s + 6 THEN
  48.             ShowPanel (i)
  49.         END IF
  50.     NEXT
  51.  
  52.     _DISPLAY
  53.  
  54.     ch = INKEY$
  55.     IF ch = CHR$(27) THEN repeat = 0
  56.     IF ch = "n" THEN NewGame
  57.     ch = ""
  58.  
  59.  
  60.  
  61. SUB ShowPanel (i)
  62.     PRINT star(i).n
  63.  
  64. SUB PutStars
  65.     FOR i = 0 TO 99
  66.         CIRCLE (star(i).x, star(i).y), star(i).s + 6, star(i).c
  67.     NEXT
  68.  
  69. SUB NewGame
  70.     DIM k AS INTEGER
  71.     DIM r AS INTEGER
  72.     DIM dx AS INTEGER
  73.     DIM dy AS INTEGER
  74.     DIM n AS STRING * 10
  75.     star(0).n = "sol"
  76.     star(0).x = RND * (sw - 80) + 40
  77.     star(0).y = RND * (sh - 40) + 20
  78.     star(0).c = 14
  79.     star(0).s = 3
  80.     FOR i = 1 TO 99
  81.         k = 1
  82.         WHILE k
  83.             k = 0
  84.             x = INT(RND * (sw - 120)) + 60
  85.             y = INT(RND * (sh - 60)) + 30
  86.             r = INT(RND * 200)
  87.             n = names(r)
  88.             FOR j = 0 TO i - 1
  89.                 dx = x - star(j).x
  90.                 dy = y - star(j).y
  91.                 IF ABS(dx) < 60 AND ABS(dy) < 60 THEN
  92.                     k = 1
  93.                 END IF
  94.                 IF n = star(j).n THEN
  95.                     k = 1
  96.                 END IF
  97.             NEXT
  98.         WEND
  99.         star(i).n = n
  100.         star(i).x = x
  101.         star(i).y = y
  102.         star(i).c = RND * 7 + 9
  103.         star(i).s = RND * 5
  104.     NEXT
  105.  
  106. ' A lot of star names I made up
  107.  
  108. SUB GiveName
  109.     names(0) = "Acamar"
  110.     names(1) = "Arcab"
  111.     names(2) = "Acrux"
  112.     names(3) = "Adhara"
  113.     names(4) = "Arneb"
  114.     names(5) = "Antares"
  115.     names(6) = "Arcturus"
  116.     names(7) = "Atria"
  117.     names(8) = "Beid"
  118.     names(9) = "Betelgeuse"
  119.     names(10) = "Botein"
  120.     names(11) = "Beemim"
  121.     names(12) = "Bellatrix"
  122.     names(13) = "Bharani"
  123.     names(14) = "Biham"
  124.     names(15) = "Brachium"
  125.     names(16) = "Canopus"
  126.     names(17) = "Capella"
  127.     names(18) = "Castor"
  128.     names(19) = "Chara"
  129.     names(20) = "Cursa"
  130.     names(21) = "Copernicus"
  131.     names(22) = "Chalawan"
  132.     names(23) = "Chertan"
  133.     names(24) = "Dabih"
  134.     names(25) = "Dalim"
  135.     names(26) = "Deneb"
  136.     names(27) = "Denebola"
  137.     names(28) = "Diadem"
  138.     names(29) = "Diphda"
  139.     names(30) = "Dschubba"
  140.     names(31) = "Dziban"
  141.     names(32) = "Edasich"
  142.     names(33) = "Electra"
  143.     names(34) = "Elgafar"
  144.     names(35) = "Elkurud"
  145.     names(36) = "Elnath"
  146.     names(37) = "Eltanin"
  147.     names(38) = "Enif"
  148.     names(39) = "Errai"
  149.     names(40) = "Fafnir"
  150.     names(41) = "Fang"
  151.     names(42) = "Fawaris"
  152.     names(43) = "Felis"
  153.     names(44) = "Fomalhaut"
  154.     names(45) = "Fulu"
  155.     names(46) = "Fumal"
  156.     names(47) = "Furud"
  157.     names(48) = "Garnet"
  158.     names(49) = "Giausar"
  159.     names(50) = "Gienah"
  160.     names(51) = "Ginan"
  161.     names(52) = "Gomeisa"
  162.     names(53) = "Graffias"
  163.     names(54) = "Grumium"
  164.     names(55) = "Gudja"
  165.     names(56) = "Hadar"
  166.     names(57) = "Haedus"
  167.     names(58) = "Hamal"
  168.     names(59) = "Hassaleh"
  169.     names(60) = "Hatysa"
  170.     names(61) = "Helvetios"
  171.     names(62) = "Heze"
  172.     names(63) = "Homan"
  173.     names(64) = "Iklil"
  174.     names(65) = "Imai"
  175.     names(66) = "Intercrus"
  176.     names(67) = "Izar"
  177.     names(68) = "Iccar"
  178.     names(69) = "Inar"
  179.     names(70) = "Iaeth"
  180.     names(71) = "Imaous"
  181.     names(72) = "Jabbah"
  182.     names(73) = "Jishui"
  183.     names(74) = "Jax"
  184.     names(75) = "Jalae"
  185.     names(76) = "Jewel"
  186.     names(77) = "Jumbo"
  187.     names(78) = "Jerue"
  188.     names(79) = "Jabear"
  189.     names(80) = "Kakkab"
  190.     names(81) = "Kang"
  191.     names(82) = "Kekouan"
  192.     names(83) = "Keid"
  193.     names(84) = "Kitalpha"
  194.     names(85) = "Kochab"
  195.     names(86) = "Kolob"
  196.     names(87) = "Kobol"
  197.     names(88) = "Larawag"
  198.     names(89) = "Lesath"
  199.     names(90) = "Libertas"
  200.     names(91) = "Lich"
  201.     names(92) = "Lilly"
  202.     names(93) = "Laddel"
  203.     names(94) = "Luminous"
  204.     names(95) = "Lasacious"
  205.     names(96) = "Mizar"
  206.     names(97) = "Markab"
  207.     names(98) = "Matar"
  208.     names(99) = "Mintaka"
  209.     names(100) = "Meleph"
  210.     names(101) = "Menkar"
  211.     names(102) = "Merga"
  212.     names(103) = "Merope"
  213.     names(104) = "Nahn"
  214.     names(105) = "Naos"
  215.     names(106) = "Nashira"
  216.     names(107) = "Navi"
  217.     names(108) = "Nekkar"
  218.     names(109) = "Nembus"
  219.     names(110) = "Nihal"
  220.     names(111) = "Nunki"
  221.     names(112) = "Ogma"
  222.     names(113) = "Okab"
  223.     names(114) = "Ohmy"
  224.     names(115) = "Oragami"
  225.     names(116) = "Origen"
  226.     names(117) = "Omanii"
  227.     names(118) = "Obytewa"
  228.     names(119) = "Oglok"
  229.     names(120) = "Phact"
  230.     names(121) = "Pherkad"
  231.     names(122) = "Pleione"
  232.     names(122) = "Polaris"
  233.     names(123) = "Pollux"
  234.     names(124) = "Procyon"
  235.     names(125) = "Proxima"
  236.     names(126) = "Polis"
  237.     names(127) = "Quaint"
  238.     names(128) = "Quazzat"
  239.     names(129) = "Quetzal"
  240.     names(130) = "Qussol"
  241.     names(131) = "Quella"
  242.     names(132) = "Quyaeo"
  243.     names(133) = "Ququdas"
  244.     names(134) = "Quekak"
  245.     names(135) = "Rasalas"
  246.     names(136) = "Regor"
  247.     names(137) = "Regulus"
  248.     names(138) = "Rigel"
  249.     names(139) = "Revati"
  250.     names(140) = "Rotenev"
  251.     names(141) = "Rukbat"
  252.     names(142) = "Rastaban"
  253.     names(143) = "Sabik"
  254.     names(144) = "Sadr"
  255.     names(145) = "Saiph"
  256.     names(146) = "Sargas"
  257.     names(147) = "Sarin"
  258.     names(148) = "Syrma"
  259.     names(149) = "Spica"
  260.     names(150) = "Sirius"
  261.     names(151) = "Tarazed"
  262.     names(152) = "Taygeta"
  263.     names(153) = "Tejat"
  264.     names(154) = "Thabit"
  265.     names(155) = "Thuban"
  266.     names(156) = "Tiaki"
  267.     names(157) = "Toliman"
  268.     names(158) = "Torcular"
  269.     names(157) = "Umala"
  270.     names(158) = "Ulatte"
  271.     names(159) = "Ubbessa"
  272.     names(160) = "Unoless"
  273.     names(161) = "Umaddem"
  274.     names(162) = "Ummbra"
  275.     names(162) = "Uniqu"
  276.     names(163) = "Uzzaal"
  277.     names(164) = "Vega"
  278.     names(165) = "Veritate"
  279.     names(166) = "Vindetrix"
  280.     names(167) = "Vedas"
  281.     names(168) = "Vergg"
  282.     names(169) = "Vacant"
  283.     names(170) = "Vucae"
  284.     names(171) = "Vicar"
  285.     names(172) = "Wasat"
  286.     names(173) = "Wazn"
  287.     names(174) = "Wezen"
  288.     names(175) = "Waiten"
  289.     names(176) = "Wachar"
  290.     names(177) = "Wheelz"
  291.     names(178) = "Whatsp"
  292.     names(179) = "Wassand"
  293.     names(180) = "Xenno"
  294.     names(181) = "Xyphod"
  295.     names(182) = "Xu"
  296.     names(183) = "Xaal"
  297.     names(184) = "Xyross"
  298.     names(185) = "Xiggot"
  299.     names(186) = "Xirrks"
  300.     names(187) = "Yed"
  301.     names(188) = "Yildun"
  302.     names(189) = "yundun"
  303.     names(190) = "Yavyo"
  304.     names(191) = "Yotrac"
  305.     names(192) = "Yxzoqu"
  306.     names(193) = "Ynnot"
  307.     names(194) = "Zaniah"
  308.     names(195) = "Zaurak"
  309.     names(196) = "Zhang"
  310.     names(197) = "Zibal"
  311.     names(198) = "Zosma"
  312.     names(199) = "Zuben"
  313.  
  314.  
My name is Michael, but you can call me Mike :)