TweetFollow Us on Twitter

Talking HangMan
Volume Number:2
Issue Number:4
Column Tag:Basic School

Play the Talking HangMan Game!

By Dave Kelly, Engineer, MacTutor Editorial Board

This month I would like to thank Clear Lake Research for kindly sending me a copy of their SpeechLib Library. [Available through MacTutor's Technical Software Store. -Ed] As computers become smarter and smarter, we are sure to find those that will do many of the same tasks that humans do. Already, I get sales recordings on my telephone from some computer that goes through a list of numbers and presents their sales pitch. We can't even comprehend how far computers will take us in the future. In fact, in 1979 when I bought my first Apple ][+, I was thrilled to have that much capability. I never thought that computers would become much different, until Macintosh came along.

I've seen a large variety of speech synthesizer cards for the Apple ][. When they first came out, the speech was hardly recognizable. I've seen good ones and bad ones. When I got my Macintosh, I was excited that the Mac had a built in synthesizer, however, I was disappointed to find that the software to program the synthesizer had not been written. Well, enough talk. The CLR SpeechLib Libraries provide a low cost way to provide speech from within your MSBASIC programs (version 2.0 or greater).

MacinTalk is a copyrighted program of Apple Computer, Inc. licensed to Clear Lake Research to distribute for use with SpeechLib. SpeechLib allows you to use the MacinTalk speech synthesis system developed by Apple from MSBASIC. SpeechLib statements are similar to other CLR library statements as we have discussed in past issues of MacTutor.

Speaking of libraries, I hereby wish to make a correction to a statement that I made a couple of months ago. I stated that for some reason when you use DEFINT a-z an error results. Well, the error was partially mine. When you call a library, the library name (example: SpeechOn) will be specified as if it were an integer variable if you have used DEFINT a-z. The library name must be declared as a single precision variable type by placing an exclaimation point after the library name (example: SpeechOn! ). Therefore, when you want to use DEFINT and libraries, you should use an exclaimation point after the library name.

If you are using MacinTalk from another language, parts of the following discussion may be useful to you. SpeechLib accepts either English or phonemic spellings. Phonemic spellings produce much better sounding speech and are highly recommended. However, English is much easier to use. Phonemic sounds are shown below:

By mixing combinations of these phonemic spellings, you can form the sound that you want. You can see why it takes more time to program in phonemic spellings; each sound must be matched to the phonemes.

PHONEMIC SOUNDS

VOWELS

AA hot AX about IX solid

AE bat EH bet IY beet

AH under ER bird OH border

AO talk IH bit UH look

AX and IX should not be used in stressed syllables!

CONSONANTS

B but K camp T toy

CH check L yellow TH thin

/C loch M men V very

D dog N men W away

DH then NX sing Y yellow

F fed P put Z has

G guest R red ZH pleasure

/H hole S sail

J judge SH rush

DIPHTHONGS

AW power EY made OY boil

AY hide OW low UW crew

SPECIAL SYMBOLS

DX pity Q kitt_en RX car

LX call QX silent vowel UL=AXL

SHORT HAND SYMBOLS

IL=IXL IM=IXM IN=IXN

UL=AXL UM=AXM UN=AXN

digits 1-9 stress marks - phrase delimiter

. sentence terminator , clause delimiter

? sentence terminator ( ) noun phrase delimiters

Also included with the SpeechLib disk is the program ExceptionEdit. This program was witten by Apple to be used to create a dictionary of words and their phonemic spellings. When a word in the dictionary is encountered by MacinTalk, the phoemic spelling in the dictionary determines the pronounciation of the word. This makes using English instead of phonemic spellings possible for hard to pronounce (or spell) words. It is possible to mispell words in english to 'fool' MacinTalk into pronoucing them correctly. If you do this, then the exception dictionary is not necessary. However, you may want to read aloud a text file which must have correct spellings. You should create an exceptions dictionary in this case.

There are two SpeechLib statements used to initialize the speech output. First open the Library and define variables for the handle! (SpeechHand!=0), for possible speech errors (SpeechErr%=0), and for the phonemic spelling of the string to be output (Phon$=""). The statement SpeechOn "",SpeechHand!,SpeechErr% turns on and initializes MacinTalk.

To use english spellings with SpeechLib, you first must put the desired text into a string (example: Eng$). MacinTalk understands phonemic spellings, therefore your string must be converted before the string can be spoken. The SpeechLib command for this is:

 ReaderString SpeechHand!,Eng$, Phon$,SpeechErr%.

To use phonemic spellings or the converted Eng$ spelling (Phon$), you use the statement:

 SoundOutString SpeechHand!, Phon$, SpeechErr%

Statements are provided to change the pitch, mode and speech rate of the speech (SpeechPitch and SpeechRate). The pitch can range from 65-500. The mode selects a natural or a robotic sounding voice. The speech rate can be adjusted from 85-425 words per minute. The volume is controlled by poking the volume desired into address &H208. The range of the volume is 0 to 7, where 7 is the loudest.

The best way to sample the speech and test out phrases you want to use is to use the speech demo provided on the SpeechLib disk. This way you can find out how words sound before using them in your program. Phonemic spellings take much longer time to program until you start to learn the phonemic spelling chart. Some words may take some work to get them to sound just like you want. In fact, there are some words that I couldn't quite get to sound like I wanted. Be careful to use uppercase only for phonemic spellings and follow the Phonemic Spelling table to obtain the desired sounds. Try some out till they have the sound you want. The limitation is in the capabilities of the speech synthesizer. I found that the first few sentences that I heard were hard to understand. After getting used to it, I have no trouble distinguishing the speech. I tried it out on my 4 year old boy who seemed to catch on to the sound after a few sentences also. All things considered, the Macintosh still has a better synthesizer than I had seen prior to it's design in the early eighties (83-84?).

HANGMAC

The inspiration for HangMac came from the hand held Speak-N-Spell games. Word type games are probably the most suited to adding speech. I give you this example to show how speech could be added to a program, even after it was already written. In fact, most of the programming time was spent on the game itself and not the speech. Adding speech was a very simple task.

HangMac was written first without speech. Two basic modules were added to introduce speech. The first one I call InitTalk.

InitTalk:
    SpeechHand!=0:SpeechErr%=0:Phon$=""
    hertz%=190:mode%=0:Wpm%=125
    SpeechOn! "",SpeechHand!,SpeechErr%
    SpeechPitch! SpeechHand!,hertz%,mode%
    SpeechRate! SpeechHand!,Wpm%
    POKE &H208,5
    RETURN

InitTalk sets up all the variables used by SpeechLib. The rate, pitch, volume and mode is set up here. The other major speech module is Speakup:

Speakup:

ReaderString! SpeechHand!, Eng$,Phon$,SpeechErr%

SoundOutString! SpeechHand!,Phon$,SpeechErr%

RETURN

Speakup converts the string Eng$ to Phonemic spelling (Phon$) and outputs Phon$ to MacinTalk. Other than these two routines, the only requirement is to open and close the library properly. A note: MacinTalk must be on the same disk as BASIC in order to work. Any exception dictionaries must also be on the same disk as BASIC in order to work. You may note that some words sent to the SpeechLib routines appear to be mispelled. This is to correct some mispronounciations of english spelled words. Don't attempt to correct the spellings or the words just won't sound right.

The LIBRARY statement specifies the disk and filename of the SpeechLib library. Be sure that your disk has the right name or modify the LIBRARY statement to match the name of the disk and filename of the SpeechLib Library. The fact that all this stuff has to be contained on one disk makes this just a bit of a hassle. An 800K disk drive or a hard disk should solve that problem.

Please note that HangMac has not been tried out on a 128K Mac. When using libraries, more heap space may be required. The SpeechErr% variable returned in most of the SpeechLib calls should return a zero. HangMac does not check for this, so if you get an speech error, check to see what value SpeechErr% returns by typing PRINT SpeechErr% in the command window and hitting return just after the error occurs. If SpeechErr% is not zero after the SpeechOn call, then MacinTalk could not be opened. The most likely problem is that MacinTalk is not on the same disk as BASIC. Another possiblity is that you have run out of heap space. Use BASIC's FRE() to check on available memory space and BASIC's CLEAR statement to allocate more or less as necessary. HangMac is already set up for a data segment size of 20000. Without the statement CLEAR 20000! at the beginning of the program, the heap size is too small, which causes the disk to run alot more.

SpeechLib also provides a more efficient memory management method by storing strings on the heap. The strings may be used later by referencing the desired string. HangMac does not use this feature. If you use it, you may have to watch your heap space more closely. If you are using other CLR (or others) libraries with SpeechLib, memory management is more of a concern.

HangMac automatically checks to see if you have CLR SpeechLib and disables all the talking parts of the program through the use of the variable talk. This enables you to run HangMac without sound if you don't have CLR SpeechLib. If speech is enabled, the speech can be turned on or off at any time (it speeds up the game) by selecting the speech menu.

I recommend, before you start to play HangMac, that you add more words to the program. I have started with 15 words (words related to the MAC). To add words, add to the DATA statements at the end of the program. Next change the line toward the beginning of the HangMac program which sets the variable number to the number of words (currently 15). That's all there is to it. The more words you have the more chance there is of getting a different word every time. When I was first creating the program I started with five words, and I often got the same word more than once. The words are randomized each time a new word is selected, so you don't know which word will be used.

Choose Instructions for a quick overview of the program. If speech is turned on, the instruction window will let you choose a TALK button to have the instructions read to you. Choose OK to close the instruction window.

Choose Start Game to begin HangMac. Most of your selections will have an audio response if the speech is turned on. Three windows are displayed. The first window shows the characters which have been used or guessed already. The second window shows the word to be guessed by displaying blanks for the characters until they are guessed correctly. You may type the whole word in if you think you know what it is. If you are wrong a new part of the HangMac man is drawn on the hanging post. You have 10 tries and then you're hung.

This may not be the best Hangman game you have ever seen, but it must be the first one you have had talk to you. HangMac will mostly be exciting for younger aged children. Even now as I approach the deadline for this column, my young sons are leaning over my shoulder waiting for me to finish so they can try it. Well, I guess it's time to play.

'HANGMAC
'©MACTUTOR, 1986
'by David Kelly

    Initialize:
    CLEAR,20000!
    DEFINT a-z
    DIM wordchar(1)
    false=0:true=NOT false
    talk=true:number=15
    DIM wordarray$(number)
    ON ERROR GOTO 10
    LIBRARY "CLR SpeechLib:SpeechLib"
5 :ON ERROR GOTO 0
    IF talk=true THEN GOSUB InitTalk
    FOR i=1 TO number
        READ wordarray$(i)
    NEXT i
    blank$=""
    FOR i=1 TO 40:blank$=blank$+" ":NEXT i
    WINDOW CLOSE 1
    FOR i=1 TO 5
        MENU i,0,0,""
    NEXT i
    
    MENU 1,0,1,"File"
    MENU 1,1,1,"Instructions"
    MENU 1,2,1,"Start Game"
    MENU 1,3,1,"Quit"
    MENU 2,0,1,"Speech"
    MENU 2,1,2,"ON"
    MENU 2,2,1,"OFF"
    IF talk=false THEN MENU 2,0,0
    WrongGuess=10
    GOSUB HangSetup
    GOSUB DrawHangMac
    ON MENU GOSUB menuevent
    MENU ON
idleloop: GOTO idleloop

menuevent:
    menunumber=MENU(0):IF menunumber=2 THEN Speechmenu
    menuitem=MENU(1):MENU
    MENU 1,0,0
    ON menuitem GOSUB Instructions,Start,Quit
    RETURN

Speechmenu:
    menuitem=MENU(1):MENU
    IF menuitem=1 THEN MENU 2,1,2:MENU 2,2,1:talk=true
    IF menuitem=2 THEN MENU 2,1,1:MENU 2,2,2:talk=false
    MENU ON
    RETURN
    
InitTalk:
    SpeechHand!=0:SpeechErr%=0:Phon$=""
    hertz%=190:mode%=0:Wpm%=125
    SpeechOn! "",SpeechHand!,SpeechErr%
    SpeechPitch! SpeechHand!,hertz%,mode%
    SpeechRate! SpeechHand!,Wpm%
    POKE &H208,5
    RETURN
    
Quit:
    GOSUB ClearKeyboard
    IF talk=true THEN Eng$="Good buy.   Play again             sometime.":GOSUB 
Speakup
    IF talk=true THEN SpeechOff! SpeechHand!  :LIBRARY CLOSE
    WINDOW CLOSE 1
    WINDOW CLOSE 2
    WINDOW CLOSE 3
    MENU RESET
    END
    
Start:
    MENU ON
    x!=FRE(1)
    RANDOMIZE TIMER
    index=INT(RND(1)*number)
    IF index=0 THEN Start
    word$=wordarray$(index)
    GOSUB HangSetup
    ERASE wordchar
    DIM wordchar(LEN(word$))
    FOR i=1 TO LEN(word$)
        wordchar(i)=false
    NEXT i
    usedchar=0:used$=""
    WrongGuess=0:lose=false
    TEXTFONT(2)
    TEXTSIZE(14)
    TEXTFACE(1)
    wflag=false
    sumword=0
    GOSUB DisplayWord
    IF talk=false THEN inputchar
    Eng$="Your word is "+STR$(LEN(word$))+" characters long."
    GOSUB Speakup
inputchar:
    WINDOW 1
    GOSUB DrawHangPost
    GOSUB ClearKeyboard
    EDIT FIELD 1,"",(95,190)-(410,210),1,2
    IF talk=false THEN charloop
    Eng$="Please choose a letter"
    GOSUB Speakup
charloop:
    d=DIALOG(0)
    IF d<>6 THEN charloop
    char$=UCASE$(EDIT$(1))
    IF char$="" THEN inputchar
    IF talk=false THEN checkchar
    Eng$="You have selected, "+char$+".  "
    IF char$<"A" OR char$>"Z" THEN Eng$=Eng$+"That character is not aloud."
    IF INSTR(used$,char$)<>0 THEN Eng$=Eng$+"That letter is already used."
Wrong:IF char$<>word$ AND LEN(char$)<>1 THEN Eng$=Eng$+"WRONGE!"
    GOSUB Speakup
checkchar:
    IF char$<"A" OR char$ >"Z" THEN inputchar
    IF INSTR(used$,char$)<>0 THEN inputchar
    IF char$=word$ THEN GOSUB foundword
    IF char$<>word$ AND LEN(char$)<>1 THEN WrongGuess=WrongGuess+1:GOSUB 
DrawHangMac :GOTO inputchar
    used$=used$+char$+" "
    oldsum=sumword
    sumword=0
    FOR i=1 TO LEN(word$)
        IF char$=MID$(word$,i,1) THEN wordchar(i)=true
        sumword=wordchar(i)+sumword
    NEXT i
    Eng$="That's "
    IF oldsum=sumword THEN WrongGuess=WrongGuess+1: Eng$=Eng$+"WRONG!"
    IF sumword=-LEN(word$) THEN wflag=true
    IF (wflag=false) AND (oldsum<>sumword) THEN Eng$=Eng$+"Right.   There 
is at least one " +char$+" in the word."
    IF wflag=true THEN Eng$=Eng$+"Right.  You have guessed the word."
    IF talk=true THEN GOSUB Speakup
    GOSUB DisplayUsedChars
    GOSUB DrawHangMac
    GOSUB DisplayWord
    IF wflag=false AND lose=false THEN inputchar
    IF wflag=true THEN Eng$="You Won.  The word is "+word$+".  Select 
Start Game to Play again."
    IF lose=true THEN Eng$="You're dead.  The word is "+word$+". Select 
Start Game to Play again."
    IF talk=true THEN GOSUB Speakup
    FOR i=1 TO LEN(word$)
        wordchar(i)=true
    NEXT i
    WINDOW 1
    EDIT FIELD CLOSE 1
    MENU 1,0,1
    RETURN

HangSetup:
    WINDOW 1,"HangMac",(10,100)-(500,320),2
    TEXTFONT(2):TEXTSIZE(18):TEXTFACE(1)
    LOCATE 1,1:PRINT "HangMac"
    TEXTSIZE(10):TEXTFACE(0)
    PRINT " Copyright ©MacTutor, 1986"
    PRINT" by David Kelly."
    WINDOW 2,"",(95,30)-(410,45),2
    WINDOW 3,"",(95,65)-(410,80),2
    WINDOW 1
    RETURN

foundword:
    wflag=true
    FOR i=1 TO LEN(word$)
        wordchar(i)=true
    NEXT i
    RETURN

DisplayWord:
    WINDOW 3
    LOCATE 1,1
    PRINT blank$:LOCATE 1,1
    IF lose=true THEN PRINT word$;:RETURN
    FOR j=1 TO LEN(word$)
        IF wordchar(j)=true THEN PRINT MID$(word$,j,1); ELSE PRINT "_ 
";
    NEXT j
    RETURN
    
DisplayUsedChars:
    IF LEN(char$)>1 THEN RETURN
    WINDOW 2
    LOCATE 1,1
    PRINT used$;
    RETURN
    
DrawHangMac:
    WINDOW 1
    GOSUB DrawHangPost
    IF WrongGuess >=1 THEN CIRCLE(250,35),25
    IF WrongGuess >=2 THEN CIRCLE(260,25),5
    IF WrongGuess >=3 THEN CIRCLE(240,25),5
    IF WrongGuess >=4 THEN LINE(240,45)-(260,45)
    CALL PENSIZE(2,2)
    CALL MOVETO(250,60)
    IF WrongGuess >=5 THEN CALL LINETO(250,125)
    IF WrongGuess >=6 THEN CALL LINE(45,45)
    IF WrongGuess >=7 THEN CALL MOVETO(250,125):CALL           LINE(-45,45)
    IF WrongGuess >=8 THEN CALL MOVETO(250,90):CALL            LINE(25,-25)
    IF WrongGuess >=9 THEN CALL MOVETO(250,90):CALL            LINE(-25,-25)
    CALL PENNORMAL
    IF WrongGuess >=9 THEN CALL MOVETO(255,20):CALL            LINE(10,10):CALL 
MOVETO(255,30):CALL  LINE(10,-10)
    IF WrongGuess >=9 THEN CALL MOVETO(235,20):CALL            LINE(10,10):CALL 
MOVETO(235,30):CALL  LINE(10,-10)
    IF WrongGuess >=9 THEN lose=true
    RETURN
    
DrawHangPost:
    CALL PENSIZE(4,4)
    CALL MOVETO(250,5)
    CALL LINETO(310,5)
    CALL LINETO(310,185)
    RETURN
    
ClearKeyboard:
    key$="X"
    WHILE key$ <>""
        key$=INKEY$
    WEND
    RETURN

10 :IF ERR=53 THEN talk=false
    RESUME 5
    END
    
Instructions:
    WINDOW CLOSE 2
    WINDOW CLOSE 3
    WINDOW 1,"Instructions",(10,30)-(500,330),-2
    TEXTFONT(2):TEXTSIZE(18):TEXTFACE(1)
    LOCATE 1,15:PRINT "HangMac"
    TEXTSIZE(12):TEXTFACE(0)
    LOCATE 3,1:PRINT "HangMac is the audio version of the traditional 
game of";
    PRINT" Hangman.  To play":PRINT"the game just choose ";
    TEXTFONT(0):PRINT"Start Game";:TEXTFONT(2)
    PRINT" from the File menu.   The hanging post is"
    PRINT "drawn and you may start guessing letters by typing them onto 
the base of"
    PRINT"the hanging post.  The uppermost window will display the characters 
which"
    PRINT"you have used.  The next window shows the characters, or blanks 
for the"
    PRINT"word that you are guessing.  Each time you miss, a new part 
of the HangMac"
    PRINT"man will be drawn until the entire body is drawn.  If you guess 
wrong ten"
    PRINT"times then you lose.  Type the whole word to guess the word."
    PRINT"This program features CLR SpeechLib procedures for calling 
Macintalk."
    PRINT"To use the speech feature you must have CLR SpeechLib (available 
from"
    PRINT"Clear Lake Research, 5353 Dora Street, Suite 7, Houston, Texas 
77005"
    PRINT"(800-835-2246 X 199).  However, the program will still work 
without"
    PRINT"the speech libraries being available."
    PRINT:PRINT"HangMac, Copyright ©MacTutor, 1986, by David Kelly."
    BUTTON 1,1,"OK",(445,260)-(475,290)
    IF talk=true THEN BUTTON 2,1,"TALK",(365,260)-(425,290)
WaitforButton:
    WHILE DIALOG(0)<>1:WEND
    buttonpushed = DIALOG(1)
    IF buttonpushed=2 THEN GOSUB SpeakInstructions:GOTO WaitforButton
    BUTTON CLOSE 1
    BUTTON CLOSE 2
    WINDOW CLOSE 1
    MENU 1,0,1
    RETURN
    
SpeakInstructions:
    BUTTON 1,0:BUTTON 2,0
    Eng$=" HangMac is the audio version of the traditional game of Hangman. 
 To play"
    Eng$=Eng$+" the game just choose Start Game from the File menu. The 
hanging post is"
    Eng$=Eng$+" drawn and  you may start guessing letters by typing them 
onto the base of"
    Eng$=Eng$+" the hanging post.  The uppermost wyndoe will display 
the charactors which"
    Eng$=Eng$+" you have used.  The next wyndoe shows the characters, 
or blanks for the"
    Eng$=Eng$+" word that you are guessing.  Each time you miss, a new 
part of the HangMac"
    Eng$=Eng$+"-man will be drawn until the entire body is drawn.  If 
you guess wrong ten"
    Eng$=Eng$+" times then you luse. Type the whole word to guess the 
word."
    ReaderString! SpeechHand!,Eng$,Phon$,SpeechErr%
    SoundOutString! SpeechHand!,Phon$,SpeechErr%
    Eng$="This program features CLR SpeechLib proseedures for calling 
Macintalk."
    Eng$=Eng$+" To use the speech feature you must have CLR SpeechLib 
(available from"
    Eng$=Eng$+" Clear Lake Reserch, 5353 Dora Street, sweet 7, Huse ton, 
Texas 77005."
    Eng$=Eng$+" phone- eight hundred 835-2246 extension199.  However, 
the program will still work without the speech lybraries"
    Eng$=Eng$+" being available."
    Eng$=Eng$+" HangMac, Copy right MacTutor, nineteen eighty six, by 
Dayvid Kelly."
    ReaderString! SpeechHand!,Eng$,Phon$,SpeechErr%
    SoundOutString! SpeechHand!,Phon$,SpeechErr%
    Eng$="":Phon$=""
    BUTTON 1,1:BUTTON 2,1
    RETURN

Speakup:
    ReaderString! SpeechHand!, Eng$,Phon$,SpeechErr%
    SoundOutString! SpeechHand!,Phon$,SpeechErr%
    RETURN
    
'Add additional words (as you please)
'by adding to the DATA statements below
'change the variable 'number' at the beginning
'of the program to reflect the number of words
'available.

DATA "MACINTOSH","MOUSE","DISK","DESKTOP","CURSOR"
DATA "ICON","KEYBOARD","WINDOW","MENU","PRINTER"
DATA "MODEM","BYTE","MEMORY","PROGRAM","DATA"
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Whitethorn Games combines two completely...
If you have ever gone fishing then you know that it is a lesson in patience, sitting around waiting for a bite that may never come. Well, that's because you have been doing it wrong, since as Whitehorn Games now demonstrates in new release Skate... | Read more »
Call of Duty Warzone is a Waiting Simula...
It's always fun when a splashy multiplayer game comes to mobile because they are few and far between, so I was excited to see the notification about Call of Duty: Warzone Mobile (finally) launching last week and wanted to try it out. As someone who... | Read more »
Albion Online introduces some massive ne...
Sandbox Interactive has announced an upcoming update to its flagship MMORPG Albion Online, containing massive updates to its existing guild Vs guild systems. Someone clearly rewatched the Helms Deep battle in Lord of the Rings and spent the next... | Read more »
Chucklefish announces launch date of the...
Chucklefish, the indie London-based team we probably all know from developing Terraria or their stint publishing Stardew Valley, has revealed the mobile release date for roguelike deck-builder Wildfrost. Developed by Gaziter and Deadpan Games, the... | Read more »
Netmarble opens pre-registration for act...
It has been close to three years since Netmarble announced they would be adapting the smash series Solo Leveling into a video game, and at last, they have announced the opening of pre-orders for Solo Leveling: Arise. [Read more] | Read more »
PUBG Mobile celebrates sixth anniversary...
For the past six years, PUBG Mobile has been one of the most popular shooters you can play in the palm of your hand, and Krafton is celebrating this milestone and many years of ups by teaming up with hit music man JVKE to create a special song for... | Read more »
ASTRA: Knights of Veda refuse to pump th...
In perhaps the most recent example of being incredibly eager, ASTRA: Knights of Veda has dropped its second collaboration with South Korean boyband Seventeen, named so as it consists of exactly thirteen members and a video collaboration with Lee... | Read more »
Collect all your cats and caterpillars a...
If you are growing tired of trying to build a town with your phone by using it as a tiny, ineffectual shover then fear no longer, as Independent Arts Software has announced the upcoming release of Construction Simulator 4, from the critically... | Read more »
Backbone complete its lineup of 2nd Gene...
With all the ports of big AAA games that have been coming to mobile, it is becoming more convenient than ever to own a good controller, and to help with this Backbone has announced the completion of their 2nd generation product lineup with their... | Read more »
Zenless Zone Zero opens entries for its...
miHoYo, aka HoYoverse, has become such a big name in mobile gaming that it's hard to believe that arguably their flagship title, Genshin Impact, is only three and a half years old. Now, they continue the road to the next title in their world, with... | Read more »

Price Scanner via MacPrices.net

B&H has Apple’s 13-inch M2 MacBook Airs o...
B&H Photo has 13″ MacBook Airs with M2 CPUs and 256GB of storage in stock and on sale for up to $150 off Apple’s new MSRP, starting at only $849. Free 1-2 day delivery is available to most US... Read more
M2 Mac minis on sale for $100-$200 off MSRP,...
B&H Photo has Apple’s M2-powered Mac minis back in stock and on sale today for $100-$200 off MSRP. Free 1-2 day shipping is available for most US addresses: – Mac mini M2/256GB SSD: $499, save $... Read more
Mac Studios with M2 Max and M2 Ultra CPUs on...
B&H Photo has standard-configuration Mac Studios with Apple’s M2 Max & Ultra CPUs in stock today and on Easter sale for $200 off MSRP. Their prices are the lowest available for these models... Read more
Deal Alert! B&H Photo has Apple’s 14-inch...
B&H Photo has new Gray and Black 14″ M3, M3 Pro, and M3 Max MacBook Pros on sale for $200-$300 off MSRP, starting at only $1399. B&H offers free 1-2 day delivery to most US addresses: – 14″ 8... Read more
Department Of Justice Sets Sights On Apple In...
NEWS – The ball has finally dropped on the big Apple. The ball (metaphorically speaking) — an antitrust lawsuit filed in the U.S. on March 21 by the Department of Justice (DOJ) — came down following... Read more
New 13-inch M3 MacBook Air on sale for $999,...
Amazon has Apple’s new 13″ M3 MacBook Air on sale for $100 off MSRP for the first time, now just $999 shipped. Shipping is free: – 13″ MacBook Air (8GB RAM/256GB SSD/Space Gray): $999 $100 off MSRP... Read more
Amazon has Apple’s 9th-generation WiFi iPads...
Amazon has Apple’s 9th generation 10.2″ WiFi iPads on sale for $80-$100 off MSRP, starting only $249. Their prices are the lowest available for new iPads anywhere: – 10″ 64GB WiFi iPad (Space Gray or... Read more
Discounted 14-inch M3 MacBook Pros with 16GB...
Apple retailer Expercom has 14″ MacBook Pros with M3 CPUs and 16GB of standard memory discounted by up to $120 off Apple’s MSRP: – 14″ M3 MacBook Pro (16GB RAM/256GB SSD): $1691.06 $108 off MSRP – 14... Read more
Clearance 15-inch M2 MacBook Airs on sale for...
B&H Photo has Apple’s 15″ MacBook Airs with M2 CPUs (8GB RAM/256GB SSD) in stock today and on clearance sale for $999 in all four colors. Free 1-2 delivery is available to most US addresses.... Read more
Clearance 13-inch M1 MacBook Airs drop to onl...
B&H has Apple’s base 13″ M1 MacBook Air (Space Gray, Silver, & Gold) in stock and on clearance sale today for $300 off MSRP, only $699. Free 1-2 day shipping is available to most addresses in... Read more

Jobs Board

Medical Assistant - Surgical Oncology- *Apple...
Medical Assistant - Surgical Oncology- Apple Hill Location: WellSpan Medical Group, York, PA Schedule: Full Time Sign-On Bonus Eligible Remote/Hybrid Regular Apply Read more
Omnichannel Associate - *Apple* Blossom Mal...
Omnichannel Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
Operations Associate - *Apple* Blossom Mall...
Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Business Analyst | *Apple* Pay - Banco Popu...
Business Analyst | Apple PayApply now " Apply now + Apply Now + Start applying with LinkedIn Start + Please wait Date:Mar 19, 2024 Location: San Juan-Cupey, PR Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.