Cum pot genera cuvinte semnificative aleatorii într-un joc de dactilografiere? (Dezvoltarea jocurilor, Java)

arandomguy a intrebat.

Vreau să fac un joc de dactilografiere în care utilizatorii trebuie să tasteze cuvintele afișate pe ecran. Dar nu știu cum să generez cuvinte cu sens în limba engleză, nu aberații.

Ce tehnică pot folosi pentru a realiza acest lucru?

Comentarii

  • Să am un fișier cu o mulțime de cuvinte englezești reale…  > Por Cedric Martens.
2 răspunsuri
Bálint

Nu există o modalitate încorporată în Java, dar există 2 moduri în care poți face acest lucru.

Primul mod durează mai mult timp, dar nu necesită aproape deloc spațiu de stocare. Puteți folosi o cerere HTTP GET și puteți folosi un serviciu online de cuvinte aleatorii (cum ar fi acesta) pentru a obține un cuvânt aleatoriu. Această metodă necesită o conexiune la internet.

Cealaltă modalitate este mult mai rapidă, dar utilizează mai multă memorie și spațiu de stocare. Trebuie să creați un fișier cu un dicționar de cuvinte, să îl încărcați la pornire (dacă este suficient de mic) și să obțineți un cuvânt aleatoriu din el. Puteți, de asemenea, să-l faceți să schimbe cuvintele pe baza unor reguli gramaticale (eat + ing -> eating, provoke + ing -> provoke).

Cel mai bine ar fi să folosiți ambele soluții și să vă bazați pe dicționar atunci când nu există o conexiune la internet.

Comentarii

  • Dacă vă îngrijorează spațiul de stocare, ați putea codificați dicționarul ca un acceptor de stare finităși să generezi cuvinte prin parcurgerea unei plimbări aleatorii (eventual ponderate) prin căile sale acceptate. Acest lucru va codifica în mod natural începuturile și terminațiile comune ale cuvintelor, cum ar fi „ing”, cu o redundanță redusă în comparație cu un dicționar complet, fără a fi nevoie să codificați în mod explicit un set de reguli de ortografie & excepții în sistemul dvs. Nu se va comprima la fel de mult ca un zip, dar îl puteți utiliza în timp ce este încă comprimat, ceea ce reprezintă un truc frumos…  > Por DMGregory.
  • Metoda online sună ca o idee teribilă, deoarece nu ar funcționa nici când nu este conectat.  > Por Aaron Franke.
  • @AaronFranke Chiar am scris asta în răspuns și am oferit o soluție pentru această problemă.-  > Por Bálint.
  • Lungimea medie a unui cuvânt în limba engleză este de 5 litere. Asta înseamnă că un dicționar de 10.000 de cuvinte ar ocupa un spațiu colosal de 60k (inclusiv un terminator nul) plus ceva spațiu pentru un index. Pentru a pune acest lucru în perspectivă, bannerul grafic din partea de sus a acestei pagini are de două ori această dimensiune. Zilele în care trebuia să ne facem griji cu privire la un fișier de această dimensiune au trecut de mult. Nici măcar un dicționar de 100 000 de cuvinte sau o selecție de dicționare diferite nu vor ajunge la un nivel de stocare care să merite să ne îngrijoreze.  > Por Jack Aidley.
CodingNinja

O modalitate este de a face un fișier cu o mulțime de cuvinte aleatorii și de a extrage cuvinte din poziții aleatorii. În acest fel, ați putea avea diferite dificultăți, cum ar fi cuvinte ușoare, cuvinte medii și cuvinte dificile. Iată un exemplu, care doar imprimă câte un cuvânt la un moment dat(randomizat) pe care utilizatorul trebuie să-l tasteze. Asigurați-vă că ați creat fișierul txt și să îl apelați words.txt. De asemenea, puneți-l pe desktop:

import java.io.*;
import java.util.*;

public class TypingTest {
    private static Random rand = new Random();
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        String fileName = "/Users/Tommy/Desktop/words.txt";
        File wordList = new File(fileName);
        List<String> words = new ArrayList<>();
        Scanner reader = null;

        try {
            reader = new Scanner(wordList);
        } catch (FileNotFoundException e) {
            System.out.println("file 
" + fileName + "
 not found");
            System.exit(0);
        }

        while(reader.hasNextLine()) {
            String word = reader.nextLine();
            words.add(word);
        }

        String result = playGame(words);
        System.out.println("Your score: " + result);
    }

    public static String playGame(List<String> words) {
        int wordNum = words.size();
        String attempt;
        int place;
        int correct = 0;

        for(int i = 0; i < 10; i++) {
            place = rand.nextInt(wordNum);
            String s = words.get(place);
            System.out.println(s);
            attempt = input.next();
            if (attempt.equals(s)) {
                words.remove(s);
                wordNum = words.size();
                correct++;
            }
        }
        return Integer.toString(correct) + "/" + 10;
    }
}

Iată o listă cu 500 de cuvinte aleatorii pe care le puteți folosi

wait
release
river
important
mark
electric
defective
poke
blue
beef
spring
hurt
orange
happy
zealous
flowery
accurate
brake
title
x-ray
festive
wrathful
scissors
peaceful
finicky
shape
soothe
head
spotted
needless
time
abundant
humdrum
mouth
trot
bounce
thank
avoid
shocking
minor
secret
rabbit
protect
honey
business
worthless
suggest
splendid
drab
safe
gigantic
arrive
drum
hate
dinosaurs
machine
tame
annoy
telephone
curtain
monkey
things
refuse
lunch
wooden
ruin
request
faded
camp
didactic
annoying
finger
acrid
overt
lamp
paste
rejoice
ignorant
exist
madly
doubt
increase
measly
mate
tangy
dislike
bikes
rambunctious
complete
motion
coast
air
obey
burst
nosy
consist
yellow
long
cakes
close
teaching
five
undesirable
squash
border
memorize
fowl
scarecrow
tie
present
well-to-do
meaty
wonderful
pencil
need
advice
wide-eyed
apologize
possible
dreary
skin
kick
stage
tongue
puffy
camp
ski
ghost
quickest
lip
frequent
one
efficient
angry
alleged
suit
notebook
wipe
dream
spark
work
pail
throne
unnatural
pale
brief
pets
ad hoc
overrated
house
rely
messy
pastoral
afternoon
enchanting
tense
army
spotless
button
good
reduce
leather
eye
spotty
growth
alert
statement
overflow
flame
disagree
whispering
lively
healthy
sedate
plant
melt
snatch
combative
grain
spurious
run
fuzzy
hot
large
exotic
woozy
unaccountable
zip
wren
courageous
match
form
comb
shut
pointless
languid
capricious
stop
mammoth
psychedelic
ordinary
cobweb
determined
stereotyped
sordid
arrest
inquisitive
carpenter
small
vivacious
guard
poor
funny
shaky
hilarious
egg
spiders
abounding
humor
sticky
plastic
ratty
productive
agree
fork
temper
prepare
whistle
responsible
drain
eight
nest
slow
loutish
saw
fear
scrub
volatile
moldy
attract
receptive
aberrant
neck
man
store
materialistic
shrug
billowy
driving
travel
fairies
lumpy
assorted
bow
babies
attend
dress
surprise
tranquil
marvelous
illustrious
clam
fact
plate
soft
cover
dad
trousers
cars
superficial
bawdy
drown
envious
wasteful
religion
bells
kick
announce
elastic
trap
smoggy
lively
serious
start
lavish
basin
wrench
lock
picture
hand
rail
delightful
trade
sand
face
tenuous
scream
produce
low
subtract
industrious
pass
station
wash
synonymous
red
wrong
warlike
low
contain
mailbox
liquid
expensive
string
time
open
admit
lettuce
decision
quixotic
towering
copy
better
cake
fluffy
yarn
grease
mountainous
stick
join
icicle
succinct
plastic
pear
acoustic
abrupt
position
spark
yak
bent
crook
kitty
sneaky
use
pollution
mundane
barbarous
delight
flesh
robin
party
milky
round
wretched
pleasant
treatment
winter
hot
available
train
writer
prose
furtive
building
cattle
wealthy
sassy
sponge
face
reflective
bear
wanting
bustling
wiry
tearful
hypnotic
ill
animated
verdant
toad
unlock
long-term
wall
direful
hunt
obtainable
walk
bleach
unarmed
happen
kiss
trick
queen
conscious
mourn
girls
frame
erect
secretary
field
helpful
science
crown
heady
grotesque
dress
degree
cushion
piquant
innate
square
cactus
tricky
company
remarkable
calculate
rinse
crime
push
mind
flagrant
man
permit
theory
thoughtful
crate
yummy
offbeat
paltry
bulb
optimal
stove
chemical
shallow
merciful
sore
abortive
perpetual
zonked
eyes
bore
tired
regret
fit
potato
confuse
childlike
vein
sound
attack
exchange
back
check
damaged
grandmother
division
groovy
throat
office
pin
stare
meddle
shivering
interfere
occur
hole
sugar
test
blind
free
perform
cherries
flavor
stupendous
purpose
extend
risk
fanatical
grubby
beg
romantic
outrageous
swift
bath
room
pocket
front
flower
quicksand
mark
sturdy
resolute
letters
expert
hapless
bloody
blue-eyed
hope
chew

Comentarii

  • Acesta este un mod bun de a face acest lucru, dar aș fi înclinat să iau un număr de texte gratuite de pe internet și să automatizez extragerea cuvintelor din ele. Acest lucru ar trebui să permită o gamă mai largă de cuvinte și, prin alegerea unor texte sursă diferite, ați putea să vă aromatizați seturile de cuvinte și/sau să oferiți experiențe lingvistice diferite. Ar fi necesară o anumită filtrare a cuvintelor triviale.-  > Por Jack Aidley.
  • Puteți, de asemenea, să vă generați propriul fișier text de dicționar de aici app.aspell.net/create?defaults=en_US–  > Por RobM.
  • @JackAidley Aceasta este o idee excelentă. Voi încerca să fac asta și îmi voi edita mesajul când o voi face.  > Por CodingNinja.
  • @RobM Mulțumesc pentru acel link! Lucrez la el chiar acum. Îmi voi edita postarea când o voi obține.-  > Por CodingNinja.

Tags: